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位以补偿比例的增加。这样,该列可以将所有现有精度保留在小数点左边,而在右边添加精度。

以上是 BigDecimal精度无法与JPA注释保持一致 的全部内容, 来源链接: utcz.com/qa/425635.html

回到顶部