Hibernate неправильно отображает BigDecimal - PullRequest
2 голосов
/ 24 января 2012

У меня есть два @Entity s, оба с полем BigDecimal следующим образом:

в одном модуле:

@Entity
@Table(name = "price_range")
public class PriceRange extends AbstractPersistable<Long> {
    @Column(name = "price", precision = 19, scale = 4)
    private BigDecimal price;

и в другом модуле:

@Entity
@Table(name = "invoice_position")
public class InvoicePosition extends AbstractPersistable<Long> {
    @Column(name = "optimized_cost", precision = 19, scale = 4)
    private BigDecimal optimizedCost;

обе создают таблицы в моей базе данных с правильными значениями точности и масштаба:

Table invoice_position
======================
id,optimized_cost, ...
----------------------
optimized_cost   decimal(19,4)

и

Table price_range
=================
id, price, ...
-----------------
price            decimal(19,4)

Тестовый интерфейс корректно сохраняет значения в базу данных.

Однако в модульном тесте один из двух возвращает значение с ошибкой округления:

0.520000000000000017763568394002504646778106689453125

(отладчик говорит: sacle = 51 и точность = 0)

пока другой работает нормально:

0.5200

(отладчик говорит: масштаб = 4, точность = 4)

Оба значения извлекаются из базы данных одинаковым образом (с помощью EntityManager, создающего CriteriaQuery с CriteriaBuilder внутри JpaRepository) :

List<Invoice> invoices = invoiceProvider.findAll();
List<PriceRange> priceRanges = priceRangeProvider.findAll();

В чем здесь может быть проблема? Или лучше: где это может пойти не так, если у сущности есть правильный масштаб и точность, а также база данных?

Я в полном недоумении, где я могу найти ошибку?

1 Ответ

1 голос
/ 24 января 2012

Хорошо, отметив это как ответ согласно комментариям с решением, являющимся этим

...