Hibernate和postgresql bigserial - 非顺序

时间:2016-12-14 16:00:40

标签: java postgresql hibernate

我正在使用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)?

1 个答案:

答案 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)