我正在使用 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 界面执行以下查询:
更改表 NODE 修改 (WEIGHTEDSCORE NUMBER(12, 9));
我收到一条错误,指出无法将包含数据的列修改为降低精度或缩小比例。这是我的问题!
因为我试图用现有数据更改表,所以我需要删除表并重新初始化它,或者更改列以具有更高的精度和规模。
我成功尝试了以下查询:
更改表 NODE 修改 (WEIGHTEDSCORE NUMBER(26, 9));
原因是我想在小数点右侧添加 7 位精度,因此我将整体精度添加 7 以补偿小数位数的增加。这样,该列可以保留小数点左侧的所有现有精度,同时添加右侧的精度。
关于hibernate - JPA 注释不保留 BigDecimal 精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10956050/