您的位置:首页 > 数据库 > Oracle

hibernate oracle主键自增长中sequence跳号无序的问题

2016-11-06 12:23 621 查看
1. 配置序列产生器相关属性

hibernate注解设置数据库主键自增长时,如果Oracle表中的主键ID没有按照正常的sequence自增长(+1)存入数据库。可以在序列产生器中加上
allocationSize(步长)属性的设置,
即:在@SequenceGenerator中加入allocationSize
= 1就可以了

 例子如下:

[html]
view plain
copy

@Id  
@SequenceGenerator(name="cat_id_seq",sequenceName="cat_id_seq",allocationSize=1,initialValue=1)  
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="cat_id_seq")  
@Column(name="id")  
private Integer id;  

2. @SequenceGenerator 相关属性:

属性                             是否必需                  说明
name                               必需                       必须匹配
startegy
SEQUENCE
GeneratedValue
的名称

allocationSize    可选           默认值: 50



initialValue      可选           默认值: 0


sequenceName      可选           默认值: JPA 持续性提供程序分配它自己创建的序列名


 
3. 实际操作中出现的问题
(1)每次更改allocationSize属性后,第一次插入数据库的主键ID是随机的,如:改allocationSize = 10,运行一次程序,ID起始值变成了40,如图:
 



 
再改成allocationSize = 1,再提交数据,ID起始值又变成了5,如图:
 



 
改成其他值时也是又是随机的起始值,若不改动allocationSize,则是正常的自增,每一次的起始值也是接着上一次的。不知道这是什么原因。
 
(2)initialValue=1这个属性设置为多少,好像每次都不影响ID的初始值,好像没起作用,例如:改为initialValue=100,提交数据后,数据库显示的ID还是从1开始,还是按照oracle中cat_id_seq中设置的起始值minValue和nextNumber来进行,如图:



 
不知是怎么回事。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: