我正在使用postgres和Hibernate,我注意到我生成的id有些奇怪。它在序列中产生巨大的跳跃,我有一个1524行的表,仍然是最高的id是602778。
我的id列定义如下:
id bigserial
并由nextval('my_id_seq'::regclass)
my_id_seq
的起始值为1,增量为1,并在通过SQuirreL调用nextval时很好地递增。
在我的Hibernate实体中,id映射如下:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
什么可能导致id序列突然跳跃(一度从4152跳到12041)?
答案 0 :(得分:1)
回滚和错误会这样做。 例如:
t=# create table s(i serial);
CREATE TABLE
t=# insert into s values (DEFAULT);
INSERT 0 1
t=# insert into s values (DEFAULT) returning i;;
i
---
2
(1 row)
INSERT 0 1
现在开始交易:
t=# begin;
BEGIN
t=# insert into s values (DEFAULT) returning i;
i
---
3
(1 row)
INSERT 0 1
t=# rollback;
ROLLBACK
使用了值3,现在有一个差距:
t=# insert into s values (DEFAULT) returning i;
i
---
4
(1 row)
INSERT 0 1
检查:
t=# select * from s;
i
---
1
2
4
(3 rows)