当前位置: 首页 > 知识库问答 >
问题:

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

倪振海
2023-03-14

在Oracle 12数据库中,我的一个列是用NUMBER(10,2)定义的。目标是存储这样的数字:12345678.12。实际上,感谢OracleSQLDeveloper,我可以存储这样的数字,因此格式是匹配的。

通过我的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;
}

是否有任何其他东西可以覆盖我的列定义?

共有2个答案

葛驰
2023-03-14

感谢@Guillaume F.,我启用了log4j的跟踪日志记录,并发现错误发生在一个非最新的审计表中。列定义仍然是数字(8,2),而不是数字(10,2)

秦弘亮
2023-03-14

十进制类型中的第一个数字是精度,第二个数字是刻度。
来自Oracle的留档:

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

如果分数前有10位数字,则需要DECIMAL(12,2)

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

 类似资料:
  • 问题内容: 我有这个专栏 但是当我插入类似的东西时,我得到了 应该在那里允许有10位数字,对不对? 如何正确执行此操作? 问题答案: Int具有最大值范围: 因此,由于溢出,您将获得最大值。使用bigint代替,它有8个字节,您会没事的。 http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html#integer- types

  • 问题内容: 哪种Java数据类型可以存储较大的数值,例如9999999999? 问题答案: 您的具体示例可以存储在(或必要时)中。 如果在任何时候都需要更大的数字,则可以尝试 (如果是整数)或(如果是十进制)

  • 我正在学习SQL,我试图在表中保存用户感兴趣的标记列表(通常是字符串),最好的方法是什么?是否应将所有标记保存为新表中的主键?他们是否应该有他们的on主键,而我需要比较标记,看看它是否已经存在?我完全不知道什么是最好的解决办法。 应该类似于:

  • 我正在尝试将一些大小数格式化为货币格式。我不需要小数点来显示是否在大小数点中没有,但两个小数点来显示是否有(即使只有10s) 例如。 12334->12,334

  • 我在Android上工作。我需要保存一个没有质量损失的位图。 我使用位图的方法进行了尝试,将质量设置为100。这对我不起作用,位图失去了太多的质量。我已经测试了JPEG和PNG格式。 我已经测试过将位图复制到,然后提取,并使用保存它。在这种情况下,我无法显示用这种方式保存的图像,我只看到一个空白页。 我的问题是,有没有办法在不压缩的情况下将位图保存在SD卡中? 编辑:这里我的代码的一部分 我检测到

  • 我正在创建一个项目,我将让某人从20个类别中最多选择3个类别。因为它总是最多有3个类别,所以在数据库中再创建3列(category\u 1、category\u 2、category\u 3)对我来说并不算多。 我想象在插入的时候,不是保存在3个不同的列中,而是将数组保存到一个“categories”列中。 我的问题是,在获得信息的那一刻。如果我这样做了,比如说搜索每个有一个特定类别的记录,那么什