JPA注释不会保留BigDecimal精度

时间:2012-06-08 21:07:35

标签: hibernate jpa oracle11g precision bigdecimal

我正在使用javax.persistence API和Hibernate在Oracle 11g Express数据库中创建注释并保留实体及其属性。

我在实体中有以下属性:

@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对这些注释没有反应?

2 个答案:

答案 0 :(得分:5)

我找到了答案。好哇!

我尝试通过Oracle Apex界面执行以下查询:

alter table NODE modify (WEIGHTEDSCORE NUMBER(12, 9));

我收到一条错误消息,指出包含数据的列无法修改为精度较低或规模较小。这是我的问题!

因为我试图用现有数据改变表格,所以我需要删除表格并重新初始化它,或者将列改为仅具有更高的精度和比例。

我成功尝试了以下查询:

alter table NODE modify (WEIGHTEDSCORE NUMBER(26, 9));

原因是我想在小数点右边添加7个精度位置,所以我在整体精度上加7,以弥补比例的增加。这样,该列可以保留小数点左侧的所有现有精度,同时在右侧添加精度。

答案 1 :(得分:1)

您似乎并不是唯一一个遇到此问题的人:http://www.eclipse.org/forums/index.php/m/716826/