BigDecimal 精度未使用 JPA 注释持久化



我正在使用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 对这些注释没有响应?

我找到了答案。 呼哧!

我尝试通过Oracle Apex接口执行以下查询:

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

我收到一个错误,指出无法修改包含数据的列以降低精度或小数位数。 这是我的问题!

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

我成功尝试了以下查询:

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

原因是我想在小数

点的右侧添加 7 位精度,所以我在整体精度上增加了 7 位以补偿小数位数的增加。 这样,列可以将所有现有精度保留在小数点左侧,同时在右侧添加精度。

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

最新更新