hibernate - JPA 注释不保留 BigDecimal 精度

标签 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 对这些注释没有响应?

最佳答案

我找到了答案。万岁!

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

更改表 NODE 修改 (WEIGHTEDSCORE NUMBER(12, 9));

我收到一条错误,指出无法将包含数据的列修改为降低精度或缩小比例。这是我的问题!

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

我成功尝试了以下查询:

更改表 NODE 修改 (WEIGHTEDSCORE NUMBER(26, 9));

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

关于hibernate - JPA 注释不保留 BigDecimal 精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10956050/

相关文章:

oracle - 确定性函数何时使用先前的计算值?

java - 在异构环境中是否推荐使用hibernate?

java - SQL : Get a limit of records per entity

java - JPQL多对多选择查询

java - 在 JPA 中使用 LocalDateTime 和 @Version 注释

java - 使用 Java 从 oracle 获取行 id

java - Sprint 事务 - 如果内部事务失败,则需要 REQUIRES_NEW 行为

spring - Grails 3.x : Re-using JPA/Hibernate Domain classes: Domain class not found

hibernate - JPA createQuery 或 @NamedQuery

oracle - 如何从SAP ABAP系统中提取数据?