我在后端使用Hibernate JPA。我正在使用JUnit和DBUnit编写单元测试,以将一组数据插入内存中的HSQL数据库。
我的数据集包含:
<order_line order_line_id="1" quantity="2" discount_price="0.3"/>
哪个映射到OrderLine Java对象,其中Discount_price列定义为:
@Column(name = "discount_price", precision = 12, scale = 2)
private BigDecimal discountPrice;
但是,当我运行测试用例并断言返回的折扣价等于0.3时,断言失败并说存储的值为0。如果我将数据集中的discount_price更改为0.9,则将其舍入为1。
我已经检查了一下,以确保HSQLDB不会进行四舍五入,而且绝对不是,因为我可以使用Java代码(如5.3)插入订单行对象,并且效果很好。
在我看来,由于某些原因,DBUtils似乎四舍五入了我定义的数字。有没有办法我可以强迫这种情况不会发生?谁能解释为什么会这样做?
谢谢!
最佳答案
因为遇到了类似的问题,所以我遇到了这个问题,不幸的是,在当前设置中,我无法升级休眠模式。因此,我找到了另一种解决方案,无需升级休眠即可解决该问题。以为共享不会有害。您只需扩展HSQLDialect
public class HSQLNumericWithPrecisionDialect extends HSQLDialect {
public HSQLNumericWithPrecisionDialect() {
super();
registerColumnType( Types.NUMERIC, "numeric($p, $s)" );
}
}