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

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)

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

Gui*_* F. 5

小数类型中的第一个数字是精度,第二个数字是小数位数。
来自 Oracle 的文档:

您可以指定精度(小数点左侧和右侧的总位数)和小数位数(小数部分的位数)。

如果小数有 10 位数字,则需要一个DECIMAL(12,2).

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