java - Hibernate 错误地映射 BigDecimal

标签 java hibernate scale precision bigdecimal

我有两个 @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/

相关文章:

java - iReport 外部字体

hibernate - MapKey枚举为字符串

mysql v mongodb - 以复杂用户为中心的网站的最佳解决方案?

objective-c - 如何调整和翻译 CAShapeLayer?

ios - SpriteKit : xScale makes SKEmitterNode invisible

java - 如何从 byte[] 数组中恢复 RSA 公钥?

java - 形成和排序正整数数组的最快策略

java - 简单的 Java 计算器 - while 循环直到答案为 0

java - LockModeType.OPTIMISTIC_FORCE_INCREMENT 这个锁是应用层还是数据库层

java - 如何在 Hibernate/Grails 中使用 Switch Case/Function 进行排序