BigDecimal JPA精度丢失问题

时间:2015-10-08 21:36:32

标签: java oracle hibernate java-ee jpa

在java应用程序中,我使用:

  • Oracle数据库11g
  • JPA,标准jEE实现为 持久层(open jpa)
  • Wildfly应用程序服务器

在JPA实体中,我定义了BigDecimal数值:

@Column(name = "MON_AMT", precision=18, scale=2)
private BigDecimal moneyAmount;

public void setMoneyAmount(BigDecimal moneyAmount){
    this.moneyAmount = moneyAmount;
}

public BigDecimal getMoneyAmount(){
    return moneyAmount;
}

在数据库中,此列定义为NUMBER(18,2),因此精度为18,比例为2.

当我尝试保存这样的示例值:1234567890123456.89时,它可能在持久层中被JPA错误地从数据库映射到BigDecimal值。因此,我从数据库读回时获得了数字:1234567890123457(数字被四舍五入)。

该数字已从UI层正确发送并正确存储在数据库中(SQL查询返回正确值1234567890123456.89)。

对于较小的数字(例如4567.89),不存在更有趣的问题

我尝试通过向JPA @Column注释添加参数比例和精度来解决问题,如上所示,但没有预期结果。

这个问题非常不舒服,可能会造成灾难,因为存储的价值就是货币价值。

你有什么想法可能是这种症状的原因吗?

0 个答案:

没有答案