2012-12-20 56 views
1

我在Play 2.0.2中使用了Anorm的Derby數據庫。即使沒有列有BigDecimal字段,但在插入表格時出現以下錯誤。爲什麼Anorm的executeInsert抱怨從BigDecimal轉換?

執行異常[RuntimeException的:TypeDoesNotMatch(不能轉換成1:類java.math.BigDecimal龍爲0.1列)]]

如果我看着桌子上,我可以看到,我的數據已被輸入,所以我推斷問題與返回新密鑰有關。但我明確聲明鑰匙爲bigint - 爲什麼關於BigDecimal的投訴?

回答

4

事實證明,德比always returns the key as a 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"))) 

然後,您可以將其映射到同一個map (_.longValue)Long

相關問題