1

Play2.0.2でAnormを使用してDerbyデータベースを使用しています。フィールドのある列はありませんがBigDecimal、テーブルに挿入すると次のエラーが発生します。

実行例外[[RuntimeException:TypeDoesNotMatch(Cannot convert 1:class java.math.BigDecimal to Long for column .1)]]

表を見ると、データが入力されていることがわかるので、問題は新しいキーを返すことに関係していると推測されます。しかし、私はその鍵を明確に宣言しますbigint-なぜ不満があるのBigDecimalですか?

4

1 に答える 1

4

キーが別の方法で定義されている場合でも、Derbyは常にキーを--として返します。BigDecimal解決策は、カスタムを使用してResultSetParserを処理することBigDecimalです。返されるid列の名前は「1」です。

  def idResultSetParser(implicit extractor: anorm.Column[java.math.BigDecimal]) =
    ResultSetParser.singleOpt[java.math.BigDecimal](
      anorm.SqlParser.get[java.math.BigDecimal]("1"))

または、すべてをまとめます。

  import java.math.BigDecimal
  s.executeInsert[Option[BigDecimal]](
      ResultSetParser.singleOpt[BigDecimal](
          anorm.SqlParser.get[BigDecimal]("1")))

次に、それをでにマップできLongますmap (_.longValue)

于 2012-12-20T17:47:40.400 に答える