私はjavax.persistenceAPIとHibernateを使用して、Oracle11gExpressデータベースにアノテーションと永続エンティティおよびそれらの属性を作成しています。
エンティティに次の属性があります。
@Column(precision = 12, scale = 9)
private BigDecimal weightedScore;
目標は、小数点以下12桁まで、および小数点以下9桁までの小数点以下の値を保持することです。
を計算するweightedScore
と、結果は0.1234になりますが、Oracleデータベースでエンティティをコミットすると、値は0.12と表示されます。
これは、EntityManagerオブジェクトを使用してエントリをクエリするか、WebブラウザのOracle Application Express(Apex)インタフェースで直接表示することで確認できます。
精度が正しく維持されるように、BigDecimal属性にどのように注釈を付ける必要がありますか?
注:インメモリHSQLデータベースを使用して単体テストを実行しますが、@Column
アノテーションの有無にかかわらず、精度が不足しているという問題は発生しません。
アップデート:
テーブルの説明を見ると、weightedScore
列の定義はですNUMBER(19, 2)
。アノテーションもに変更してみまし@Column(columnDefinition="Number(12, 9)")
たが、効果がありません。Oracleがこれらのアノテーションに応答しない理由を誰かが知っていますか?