Hibernate - BigDecimal Mapping Precision

时间:2011-10-13 14:09:43

标签: java hibernate

问题: 看起来我的映射类的大小数在从oracle数据库中获取像50.20这样的值时会下降0。如果它的50.23,它将正确获取值,但最后没有0。我想象我想念的东西很简单。建议?提前谢谢。

详情

数据库:Oracle 11G 字段定义:数字(8,2)

映射getter / setter

    @Column ( name="PRICE", precision = 8, scale = 2 )
private BigDecimal price;

public BigDecimal getPrice()
{
    return price;
}
public void setPrice( BigDecimal price )
{
    this.price = price;
}

3 个答案:

答案 0 :(得分:5)

50.2与50.20,50.200等相同。如果要以两位数显示,请使用java.text.DecimalFormat.format(..)

指定精度限制最大小数位数,而不是最小值。

答案 1 :(得分:3)

我可以告诉你,从数据库返回的BigDecimal值的创建是由专有的JDBC驱动程序对特定于数据库的getBigDecimal子的ResultSet方法的实现完成的。 -class。

我通过使用调试器逐步通过Hibernate源代码找到了这个,同时尝试找到my own question的答案。

似乎getBigDecimal方法的某些实现将使用数据库模式中定义的精度/比例,或者将尝试通过仅定义所需的最小精度/比例来优化返回的BigDecimal保存检索到的值。我猜测Oracle驱动程序正在做后者。

另见this other question

答案 2 :(得分:-3)

在Business Logic类中,您也可以这样设置值:

object_name.setPrice(new BigDecimal(50.20));