2012-01-24 142 views
2

我有兩個@Entity S,既具有BigDecimal字段如下:Hibernate是映射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中有JpaRepository內CriteriaBuilder)

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

什麼能在這裏是什麼問題?或者更好:如果實體具有正確的規模和精度以及數據庫,那麼它會出現哪些問題?

我在這裏非常茫然,我在哪裏可以找到錯誤?

+1

回答按評論見http://stackoverflow.com/questions/5734036/hibernate-loss-of-precision-in-results-when-mapping- a-number-22-21-to-bigdecim – axtavt

+0

看起來可能就是這樣。那麼在單元測試中初始化'BigDecimal'的最佳做法是什麼?使用'字符串'感覺...怪異.. – Pete

+0

你也可以用'長'和規模初始化它們,但它看起來不太好。 – axtavt

回答

1

好吧,這標誌着與解決方案是this