首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate和postgresql大系列-非顺序

Hibernate和postgresql大系列-非顺序
EN

Stack Overflow用户
提问于 2016-12-14 16:00:39
回答 1查看 814关注 0票数 0

我正在使用postgres和Hibernate,我注意到生成的id有一些奇怪的地方。它在序列中发生了巨大的跳跃,我有一个有1524行的表,最高的id仍然是602778。

我的id列定义为:

代码语言:javascript
复制
id bigserial

并得到nextval('my_id_seq'::regclass)的支持

my_id_seq的起始值为1,增量为1,并在通过SQuirreL调用nextval时会很好地增加。

在我的Hibernate实体中,id映射如下:

代码语言:javascript
复制
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

是什么导致了id序列中的如此突然的跳跃(一度从4152跳到12041)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-14 16:12:44

回滚和错误会做到这一点。例:

代码语言:javascript
复制
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

现在启动一个事务:

代码语言:javascript
复制
t=# begin;
BEGIN
t=# insert into s values (DEFAULT) returning i;
 i
---
 3
(1 row)

INSERT 0 1
t=# rollback;
ROLLBACK

使用了值3,现在存在一个缺口:

代码语言:javascript
复制
t=# insert into s values (DEFAULT) returning i;
 i
---
 4
(1 row)

INSERT 0 1

核对:

代码语言:javascript
复制
t=# select * from s;
 i
---
 1
 2
 4
(3 rows)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41146960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档