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

1. 配置序列产生器相关属性

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

 例子如下:

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


2. @SequenceGenerator 相关属性:

属性                             是否必需                  说明
name                               必需                       必须匹配 startegySEQUENCEGeneratedValue 的名称

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来进行,如图:
 
不知是怎么回事。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值