问题: 看起来我的映射类的大小数在从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;
}
答案 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驱动程序正在做后者。
答案 2 :(得分:-3)
在Business Logic类中,您也可以这样设置值:
object_name.setPrice(new BigDecimal(50.20));