我在Oracle 11g中将此列映射为NUMBER(21,20),它在Hibernate中映射为:
@Column(name = "PESO", precision = 21, scale = 20, nullable = false)
public BigDecimal getWeight() {
return weight;
}
Run Code Online (Sandbox Code Playgroud)
对于列的值为0.493的特定记录,我得到一个BigDecimal,其值为0.49299999999.似乎某些地方由于(可能)Double或Float转换而导致精度损失,但我无法通过这样的简单单元测试来跟踪它:
Double d = new Double("0.493");
System.out.println((d));
Run Code Online (Sandbox Code Playgroud)
该代码的任何变体,使用Float,BigDecimal和各种构造函数都会得到相同的结果:"0.493"...有关如何映射列以避免此类问题的任何提示?我正在使用Hibernate 3.5.6,带有JPA注释和Hibernate API(即Session而不是EntityManager)