更改@SequenceGenerator allocationSizeParam的影响

时间:2015-12-24 06:21:49

标签: oracle hibernate

目前我的@SequenceGenerator注释中没有设置分配大小。所以默认值是50

int allocationSize() default 50;

正如预期的那样,对应表中的ID存在差距。

现在我想将allocationSize更改为1.那么是否存在id碰撞的可能性?

1 个答案:

答案 0 :(得分:0)

我做了一些实验,以确切知道如果突然有人将allocateSize更改为默认值,将会发生什么。

对我的问题的简短回答是 - 是的,ID生成会有重复。

在我的应用中更改分配尺寸之前 allocationSize = 50(默认)

当db中的序列值为4时,hibernate从4 * 5 = 200

开始生成id
DEBUG AbstractSaveEventListener - Generated identifier: 200, using strategy: org.hibernate.id.SequenceHiLoGenerator

默认分配大小

Hilo生成器的预期行为

然后当我更改 allocationSize = 1 并再次部署我的应用程序时。

现在,

Hilo生成器currentSequenceVal * allocationSize开始生成id,就像之前一样,对于 currentSequenceValue = 5 ,它会生成id 6,7,8 ...... 。

最终会导致它重复生成id。

现在解决方案是删除序列并使用当前使用的最大id的起始值再次创建序列。