1

JPA プロバイダーとして Hibernate を使用しており、Sybase SQLAnywhere 16 データベースに「PRICE」列があり、10 進数 (19,4) として定義されています。関連データは次のように宣言されます。

@Basic(optional = false)
@NotNull
@Column(name = "PRICE", precision = 19, scale = 4)
private BigDecimal bdPrice;

次に、データ値を次のようにロードします。

...
final BigDecimal bdTest = new BigDecimal("14276.5257");
bdTest.setScale(4,BigDecimal.ROUND_HALF_EVEN);
table.setBdPrice(bdTest);

次に、em.persist() を使用して、データベースに書き込まれたデータを取得します。新しい行がデータベースに書き込まれ、Sybase データベースの「エディター」アプリを使用して、文字列列は正しいが、Price 列には 14276.0000 が表示されていることがわかります。

データベース列を double と money として定義しようとしましたが、double で 14276 を取得し、money で 14276.0000 を取得します。

また、手動で(Sybaseデータベースの「エディター」アプリを使用して)PRICEを11257.6914でロードすると、Hibernateを使用して行をフェッチでき、getBdPrice()は11257.6914の正確な値を返すため、書き込み時にのみ問題が発生します。

誰かがここで何がうまくいかないのか教えてもらえますか? データベースに 10 進数を取得するにはどうすればよいですか?

ありがとうございました。

4

0 に答える 0