5

バックエンドで Hibernate JPA を使用しています。JUnit と DBUnit を使用して単体テストを作成し、インメモリ HSQL データベースに一連のデータを挿入しています。

私のデータセットには以下が含まれています:

<order_line order_line_id="1" quantity="2" discount_price="0.3"/>

discount_price 列が次のように定義されている OrderLine Java オブジェクトにマップされます。

@Column(name = "discount_price", precision = 12, scale = 2)
private BigDecimal discountPrice;

ただし、テスト ケースを実行して、返された割引価格が 0.3 に等しいとアサートすると、アサーションは失敗し、保存された値が 0 であると表示されます。データセットの discount_price を 0.9 に変更すると、1 に切り上げられます。

HSQLDB が丸め処理を行っていないことを確認しましたが、5.3 のような値を持つ Java コードを使用して注文明細オブジェクトを挿入でき、正常に動作するため、間違いなくそうではありません。

私には、DBUtils が何らかの理由で私が定義した数値を四捨五入しているように思えます。これが起こらないようにする方法はありますか?なぜこれを行っているのか、誰か説明できますか?

ありがとう!

4

3 に答える 3

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 を使用して簡単なテストを行いましたが、期待どおりに動作しています。

  • discount_priceDbUnit は 10 進数値を型の列に正しく挿入しますnumeric(12,2)
  • discount_priceHibernate は値を正しく読み込みますBigDecimal discountPrice
  • 次のassertEquals(0.3d, orderLine.getDiscountPrice().doubleValue())パス

だから私の質問は:

  • 正確にはどのバージョンの DbUnit を使用していますか?
  • どのようにあなたの主張を正確に行いますか? そのためにも DbUnit API を使用しますか?
于 2010-05-20T13:26:46.997 に答える