1

我在 Play 2.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")))

然后,您可以将其映射到Longwith map (_.longValue)

于 2012-12-20T17:47:40.400 回答