在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;
}
还有其他任何东西可以覆盖我的列定义吗?
答案 0 :(得分:3)
十进制类型中的第一个数字是精度,第二个数字是刻度 来自Oracle的文档:
您可以指定精度(总数位数,均为 左边和右边的小数点)和刻度(数字 小数部分的数字)。
如果您在分数之前有10位数,则需要DECIMAL(12,2)
。
您看到的错误来自Oracle,而不是Hibernate,因此我怀疑更改您的实体配置将解决您的问题。
答案 1 :(得分:-1)
感谢@Guillaume F.,我启用了log4j的跟踪日志记录,我发现在一个不是最新的审计表中发生了错误。列定义仍为NUMBER(8,2)而不是NUMBER(10,2)