我使用 Hibernate 作为我的 JPA 提供程序,并且在 Sybase SQLAnywhere 16 数据库中有一个“PRICE”列,它被定义为十进制 (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 数据库“编辑器”应用程序,我可以看到字符串列是正确的,但价格列显示:14276.0000
我尝试将数据库列定义为 double 和 money,double 得到 14276,money 得到 14276.0000。
此外,如果我手动(使用 Sybase 数据库“编辑器”应用程序)加载 PRICE,例如 11257.6914,我可以使用 Hibernate 获取该行,getBdPrice() 返回 11257.6914 的确切值,因此问题仅发生在写入时。
有人可以告诉我这里出了什么问题吗?如何将十进制数字输入数据库?
谢谢你。