0
我使用postgres和休眠,我注意到我的生成的id奇怪的东西。这使得巨大的跳跃序列中,我有一个表1524行,最高尚的ID为602778.休眠和postgresql bigserial - 非顺序
我的id列的定义是这样的:
id bigserial
,并通过nextval('my_id_seq'::regclass)
my_id_seq
的起始值为1并且增量为1,并且在通过SQuirreL调用nextval时会很好地递增。
在我的Hibernate的实体,标识映射是这样的:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
什么会导致在ID序列,突然跳跃(在一个点从4152跳到12041)?
'SERIAL' PostgreSQL中的类型和序列已知包含缺口(由于他们的世代高于任何事务 - 所以生成的值永远不会回滚)。但统计上,这种巨大的跳转不能由回滚事务引起(只有当您的应用程序有一些严重的错误,它试图产生许多实体但失败 - 但我认为这是不太可能的) – pozs
这是在一个测试环境中,一个定期运行的进程。有足够的失败项目和一些时间可以解释它。检查生产,并没有那么糟糕,9716行,最大ID是43083.无论如何,我已经修复了导致尝试失败的事情作为另一项任务的一部分,希望不会有更多的差距。 – Tobb