我有两个 @Entity
,它们都有一个 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 和 precision = 0)
当另一个工作正常时:
0.5200
(调试器说:scale = 4,precision = 4)
这两个值都以相同的方式从数据库中检索(使用 EntityManager 在 JpaRepository 中使用 CriteriaBuilder 构建 CriteriaQuery):
List<Invoice> invoices = invoiceProvider.findAll();
List<PriceRange> priceRanges = priceRangeProvider.findAll();
这可能是什么问题?或者更好:如果实体具有正确的比例和精度以及数据库,哪里会出错?
我在这里很茫然,我在哪里可以找到错误?
最佳答案
好的,根据评论将其标记为已回答,解决方案为 this
关于java - Hibernate 错误地映射 BigDecimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8989230/