如何解决Oracle数据库序列与hibenate序列
我正在基于oracle db和JPA的项目中工作,
我已经意识到,应使用序列SEQ_CASO
生成其值的列具有precision= 12
。
但是,在Oracle数据库中声明的序列对象中,我发现最大数量远大于12位数字(9999999999999 ...):
我想知道如果记录数超过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 举报,一经查实,本站将立刻删除。