У меня этот столбец в Oracle 11g отображается как NUMBER (21,20), который отображается в Hibernate как:
@Column(name = "PESO", precision = 21, scale = 20, nullable = false)
public BigDecimal getWeight() {
return weight;
}
Для конкретной записи, для которой значение столбца равно 0,493, я получаю BigDecimal, значение которого равно 0,49299999999.
Кажется, что где-то происходит потеря точности из-за (возможно) преобразования Double или Float, но я не мог отследить его с помощью простого модульного теста, подобного этому:
Double d = new Double("0.493");
System.out.println((d));
Любой вариант этого кода с использованием Float, BigDecimal и различных конструкторов дает один и тот же результат: «0,493» ...
Любой намек на то, как я должен сопоставить столбец, чтобы избежать таких проблем?
Я использую Hibernate 3.5.6, с аннотациями JPA и Hibernate API (то есть Session, а не EntityManager)