Joc*_*lyn 1 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
Run Code Online (Sandbox Code Playgroud)
但通过以下内容,我收到错误
1234567.12
12345678.12
ORA-01438: value larger than specified precision allowed for this column
Run Code Online (Sandbox Code Playgroud)
它看起来像一个 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;
}
Run Code Online (Sandbox Code Playgroud)
还有其他东西可以覆盖我的列定义吗?
小数类型中的第一个数字是精度,第二个数字是小数位数。
来自 Oracle 的文档:
您可以指定精度(小数点左侧和右侧的总位数)和小数位数(小数部分的位数)。
如果小数前有 10 位数字,则需要一个DECIMAL(12,2).
您看到的错误来自 Oracle,而不是 Hibernate,因此我怀疑更改实体配置是否能解决您的问题。