5

我在后端使用 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 出于某种原因将我定义的数字四舍五入。有没有办法可以强制这种情况不发生?谁能解释它为什么会这样做?

谢谢!

4

3 回答 3

3

我遇到了这个问题,因为我遇到了类似的问题,不幸的是,在我当前的设置中,我无法升级休眠。所以我找到了一个不同的解决方案来解决这个问题,而无需升级休眠。认为分享不会有坏处。您只需扩展 HSQLDialect

public class HSQLNumericWithPrecisionDialect extends HSQLDialect {
    public HSQLNumericWithPrecisionDialect() {
        super();
        registerColumnType( Types.NUMERIC, "numeric($p, $s)" );
    }
}
于 2014-10-16T06:35:40.177 回答
1

我有一个类似的问题...通过升级到 Hibernate 3.6 来解决

于 2011-07-21T12:19:57.523 回答
-1

我对 DbUnit 2.2.2、HSQLDB 1.8.0.10 和 Hibernate EM 3.4.0.GA 进行了快速测试,一切正常:

  • DbUnit 正确地将十进制值插入到discount_price类型的列中numeric(12,2)
  • Hibernate 正确地将discount_price值读入BigDecimal discountPrice
  • 以下assertEquals(0.3d, orderLine.getDiscountPrice().doubleValue())通过

所以我的问题是:

  • 您使用的是哪个版本的 DbUnit?
  • 您如何准确地进行断言?你也有 DbUnit API 吗?
于 2010-05-20T13:26:46.997 回答