Hibernate 使用DbUnit将BigDecimal数据放入HSQLDB测试数据库
我在后端使用HibernateJPA。我正在编写一个单元测试,使用JUnit和DBUnit将一组数据插入内存中的HSQL数据库 我的数据集包含:Hibernate 使用DbUnit将BigDecimal数据放入HSQLDB测试数据库,hibernate,testing,hsqldb,dbunit,Hibernate,Testing,Hsqldb,Dbunit,我在后端使用HibernateJPA。我正在编写一个单元测试,使用JUnit和DBUnit将一组数据插入内存中的HSQL数据库 我的数据集包含: <order_line order_line_id="1" quantity="2" discount_price="0.3"/> 但是,当我运行测试用例并断言返回的折扣价格等于0.3时,断言失败,并说存储值为0。如果我将数据集中的折扣价格更改为0.9,则取整为1 我已经检查了HSQLDB,以确保它没有进行舍入,而且肯定没有,因为我可以使
<order_line order_line_id="1" quantity="2" discount_price="0.3"/>
但是,当我运行测试用例并断言返回的折扣价格等于0.3时,断言失败,并说存储值为0。如果我将数据集中的折扣价格更改为0.9,则取整为1
我已经检查了HSQLDB,以确保它没有进行舍入,而且肯定没有,因为我可以使用Java代码插入一个订单行对象,其值类似于5.3,并且工作正常
对我来说,DBUtils似乎是出于某种原因而舍入了我定义的数字。有没有办法让这件事不发生?有人能解释为什么它会这样做吗
谢谢 我用DbUnit 2.2.2、HSQLDB 1.8.0.10和Hibernate EM 3.4.0.GA做了一个快速测试,一切正常:
- DbUnit将十进制值正确插入类型为
数值(12,2)
- Hibernate将
值正确读入折扣\u价格
大十进制折扣价格
- 以下
passesassertEquals(0.3d,orderLine.getDiscountPrice().doubleValue())
- 您使用的DbUnit的确切版本是什么
- 你如何准确地表达你的主张?您是否也为其提供了DBUnitAPI
public class HSQLNumericWithPrecisionDialect extends HSQLDialect {
public HSQLNumericWithPrecisionDialect() {
super();
registerColumnType( Types.NUMERIC, "numeric($p, $s)" );
}
}
我使用的是hibernate的最新版本以及hsqldb,所以hibernate升级不是我的选择。我使用这种方法,将$p替换为5,将$s替换为2(精度和比例),效果非常好。谢谢@krico
public class HSQLNumericWithPrecisionDialect extends HSQLDialect {
public HSQLNumericWithPrecisionDialect() {
super();
registerColumnType( Types.NUMERIC, "numeric($p, $s)" );
}
}