目前我的@SequenceGenerator注释中没有设置分配大小。所以默认值是50
int allocationSize() default 50;
正如预期的那样,对应表中的ID存在差距。
现在我想将allocationSize更改为1.那么是否存在id碰撞的可能性?
答案 0 :(得分:0)
我做了一些实验,以确切知道如果突然有人将allocateSize更改为默认值,将会发生什么。
对我的问题的简短回答是 - 是的,ID生成会有重复。
在我的应用中更改分配尺寸之前 allocationSize = 50(默认)
当db中的序列值为4时,hibernate从4 * 5 = 200
开始生成idDEBUG 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的起始值再次创建序列。