Java 10位BigDecimal不能保存在数字(10,2)列中
在Oracle12数据库中,我的一列用数字(10,2)定义。目标是存储这样的数字:12345678.12。实际上,感谢Oracle SQL Developer,我可以存储这样的数字,所以格式是匹配的 通过我的Hibernate Java应用程序,当我更新包含以下值的实体时,它可以工作:Java 10位BigDecimal不能保存在数字(10,2)列中,java,oracle,hibernate,bigdecimal,Java,Oracle,Hibernate,Bigdecimal,在Oracle12数据库中,我的一列用数字(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
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
它看起来像一个数字(8,2)
该字段位于@Embeddeble类中,类型为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;
}
是否还有其他东西可以覆盖我的列定义?十进制类型中的第一个数字是精度,第二个数字是刻度。
从Oracle的文档中: 您可以指定精度(总位数,两者均为 小数点的左侧和右侧)和小数点的数量 小数部分的数字) 如果分数前有10位数字,则需要一个
十进制(12,2)
您看到的错误来自Oracle,而不是Hibernate,因此我怀疑更改实体配置能否解决您的问题。感谢@Guillaume F.,我启用了log4j的跟踪日志记录,并发现错误发生在一个非最新的审核表中。列定义仍然是数字(8,2),而不是数字(10,2)您必须每年执行一次alter table为您的表发布DDL。测试值将进入数字(10,2)定义的字段。我猜这不是字段的定义。事实是我想存储12345678.12,也就是(10,2),不是吗?那么,为什么Oracle可以告诉我该值太大呢?文档中明确指出,
12345678.12
将起作用。如果不起作用,则表示存储的数字与您预期的不同。您应该使用log4j.logger.org.Hibernate.type=trace启用Hibernate跟踪,然后您应该接受纪尧姆的回答,(A)给他应得的声誉,(B)这样您的问题就可以从未回答的问题中解脱出来。