JPA注释不会保留BigDecimal精度

Dav*_*ski 8 precision hibernate jpa bigdecimal oracle11g

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

我在实体中有以下属性:

@Column(precision = 12, scale = 9)
private BigDecimal weightedScore;
Run Code Online (Sandbox Code Playgroud)

目标是在小数点右侧保留一个最多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对这些注释没有反应?

Dav*_*ski 5

我找到了答案.好哇!

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

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

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

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

我成功尝试了以下查询:

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

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