无法在NUMBER(10,2)列中保存10位数的BigDecimal

时间:2017-04-07 10:50:34

标签: java oracle hibernate bigdecimal

在Oracle 12数据库中,我的一个列定义为NUMBER(10,2)。目标是存储类似的数字:12345678.12。实际上,我可以存储这样的数字,感谢Oracle SQL Developer,因此格式匹配。

通过我的Hibernate-Java应用程序,当我更新包含以下值的实体时,它可以工作:

1.12
12.12
123.12
1234.12
12345.12
123456.12

但是有了以下内容,我收到了错误

1234567.12
12345678.12

ORA-01438: value larger than specified precision allowed for this column

它看起来像一个NUMBER(8,2)......

该字段位于@Embeddable类中,类型为BigDecimal,没有任何字段注释:

@Entity
@Table(...)
public class ClassA implements Serializable {

    @Embedded
    private ClassB bObject;
}

@Embeddable
public class ClassB implements Serializable {

    @Embedded
    private ClassC cObject;
}

@Embeddable
public class ClassC implements Serializable {

    private BigDecimal myField;
}

还有其他任何东西可以覆盖我的列定义吗?

2 个答案:

答案 0 :(得分:3)

十进制类型中的第一个数字是精度,第二个数字是刻度 来自Oracle的文档:

  

您可以指定精度(总数位数,均为   左边和右边的小数点)和刻度(数字   小数部分的数字)。

如果您在分数之前有10位数,则需要DECIMAL(12,2)

您看到的错误来自Oracle,而不是Hibernate,因此我怀疑更改您的实体配置将解决您的问题。

答案 1 :(得分:-1)

感谢@Guillaume F.,我启用了log4j的跟踪日志记录,我发现在一个不是最新的审计表中发生了错误。列定义仍为NUMBER(8,2)而不是NUMBER(10,2)