微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Oracle数据库序列与hibenate序列

如何解决Oracle数据库序列与hibenate序列

我正在基于oracle db和JPA的项目中工作, 我已经意识到,应使用序列SEQ_CASO生成其值的列具有precision= 12

enter image description here

但是,在Oracle数据库中声明的序列对象中,我发现最大数量远大于12位数字(9999999999999 ...):

enter image description here

我想知道如果记录数超过db中的12位数字会发生什么? JPA定义的12个数字的精度会破坏应用程序还是什么?

解决方法

回答您的主要问题:

我想知道如果记录数超过数据库中的12位数字会发生什么情况?

考虑到您引用的代码是通过逆向工程完成的,因此该列在Oracle中可能定义为NUMBER(12,0)(精度12,小数位数为0)。

也就是说,当您的应用程序中的序列到达生成13位数字的点时,当尝试在表中插入这些数字时,Oracle数据库将返回以下错误:

ORA-01438:该列允许的值大于指定的精度

在Oracle中,精度和小数位数的定义可能很棘手,尤其是在未明确定义精度和小数位数的情况下(即col被定义为NUMBER-未指定精度或小数位数)。

有关精度和小数位数的更多信息:

What is the difference between precision and scale?

What is the default Precision and Scale for a Number in Oracle?

,

您不需要使用@Column注释定义唯一的,可空的属性。当您定义@Id批注时,它将成为非null且唯一的主键列。

即使您不需要定义precision属性,没有它也可以正常工作。

@Id
@SequenceGenerator(name="SEQ_CASO",sequenceName="SEQ_CASO_PK",initialValue=1500000,allocationSize=1)
@GeneratedValue(generator="SEQ_CASO",strategy=GenerationType.Sequence)
@Column("ID")
private long Id;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?