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();
什麼能在這裏是什麼問題?或者更好:如果實體具有正確的規模和精度以及數據庫,那麼它會出現哪些問題?
我在這裏非常茫然,我在哪裏可以找到錯誤?
回答按評論見http://stackoverflow.com/questions/5734036/hibernate-loss-of-precision-in-results-when-mapping- a-number-22-21-to-bigdecim – axtavt
看起來可能就是這樣。那麼在單元測試中初始化'BigDecimal'的最佳做法是什麼?使用'字符串'感覺...怪異.. – Pete
你也可以用'長'和規模初始化它們,但它看起來不太好。 – axtavt