Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 10位BigDecimal不能保存在数字(10,2)列中_Java_Oracle_Hibernate_Bigdecimal - Fatal编程技术网

Java 10位BigDecimal不能保存在数字(10,2)列中

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

在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 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)这样您的问题就可以从未回答的问题中解脱出来。