Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Hibernate在BigDecimal中将所有小数点设置为零?_Hibernate_Jpa_Sybase Asa - Fatal编程技术网

为什么Hibernate在BigDecimal中将所有小数点设置为零?

为什么Hibernate在BigDecimal中将所有小数点设置为零?,hibernate,jpa,sybase-asa,Hibernate,Jpa,Sybase Asa,我使用Hibernate作为我的JPA提供者,我在Sybase SQLAnywhere 16数据库中有一个价格列,它被定义为小数19,4。关联数据声明为: @Basic(optional = false) @NotNull @Column(name = "PRICE", precision = 19, scale = 4) private BigDecimal bdPrice; 然后,我用以下内容加载数据值: ... final BigDecimal bdTest = new BigDecim

我使用Hibernate作为我的JPA提供者,我在Sybase SQLAnywhere 16数据库中有一个价格列,它被定义为小数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数据库编辑器app load PRICE,比如11257.6914,我可以使用Hibernate获取行,getBdPrice返回11257.6914的精确值,因此问题只发生在写操作上

有人能告诉我这里出了什么问题吗?如何将十进制数字输入数据库


谢谢。

嘿,你用JConnect吗?如果是的话,这将是一次有益的讨论。我花了几天时间研究你的链接,但没有成功。我使用SQLAnywhere 16、jConnect 7和SQLAnywhere 16方言作为Hibernate方言。看起来,将数据声明为字符串与BigDecimal是一种难看的破解方法。有什么真正的解决办法吗?知道为什么Sybase/SAP没有解决这个问题吗?谢谢你的帮助。