1. 配置序列产生器相关属性
hibernate注解设置数据库主键自增长时,如果Oracle表中的主键ID没有按照正常的sequence自增长(+1)存入数据库。可以在序列产生器中加上allocationSize(步长)属性的设置,
即:在@SequenceGenerator中加入allocationSize = 1就可以了
例子如下:
- @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来进行,如图:
不知是怎么回事。