首页 > 解决方案 > 在休眠中映射 NUMBER(15)

问题描述

因此,我们的数据模式列中有 type NUMBER(15)。如何在不更改架构的情况下将其映射到休眠状态?int数据类型太小了,long数据类型太大了(ORA-01438),即使在持久化具有 DB 列边界的数字时也是如此。

假设,该模式是不可修改的,我们不想使用 BigInteger。比如说,我们知道,这个数字不会大于 372036854775807,因此可以同时放入 long 和 NUMBER(15)。

甲骨文数据库。

标签: oraclehibernate

解决方案


所以实际上这是我的错,因为在数字比例和精度方面误读了 Oracle 文档。我想,精度是“。”之前的部分,然后是比例,但是不,精度是所有数字的数量。这导致了我的问题,并且在不同的列上。

回答我自己的问题:对于适合 DB 层中使用的类型的数字,不会抛出 ORA-01438。因此,如果我知道,应用层上使用的数据类型不能大于 number(15),我可以安全地在 java 中使用 long,在 DB 中使用 NUMBER(15)。在违反此约束之前,一切都很好。首先,遵守这个约束很重要,没有它 BigInteger 也无济于事,因为 BigInteger 可以大于 NUMBER(37)。


推荐阅读