allocationSize参数必须与
INCREMENT BY序列的值匹配。
它的工作方式是Hibernate从序列(从数据库)中获取一个值,然后将该值保存在内存中,并生成下一个X后续标识符(其中X =
allocationSize)在内存中将该值加1,而无需到达数据库。
Hibernate生成X标识符后,它将从序列中获取下一个值,并生成新的X标识符,并将该值增加1
一个简单的例子-假设:
@SequenceGenerator( ....allocationSize=5 ...)
CREATE SEQUENCE .... INCREMENT BY 1 ...
在上述情况下,Hibernate:
- 从序列中获取第一个数字-说说
NextVal = 1
并将其存储在内存中 - 生成
allocationSize=5
将上述值加1的下一个标识符,即:Id = 1, 2, 3, 4, 5
- 从序列中获取下一个数字-由于
INCREMENT BY 1
,nextVal
将为:2
- 生成
allocationSize=5
将上述值加1的下一个标识符,即:Id = 2, 3, 4, 5, 6
如您所见,它将导致双重错误。
现在请考虑这种情况:
@SequenceGenerator( ....allocationSize=5 ...)
CREATE SEQUENCE .... INCREMENT BY 5 ...
在这种情况下,hibernate:
- 从序列中获取第一个数字-说说
NextVal = 1
并将其存储在内存中 - 生成
allocationSize=5
将上述值加1的下一个标识符,即:Id = 1, 2, 3, 4, 5
- 从序列中获取下一个数字-由于
INCREMENT BY 5
,nextVal
将为:6
- 生成
allocationSize=5
将上述值加1的下一个标识符,即:Id = 6, 7, 8, 9, 10
在这种情况下,没有重复的错误。
最后一种情况的缺点是,如果该序列在Hibernate之外使用,则该序列将产生间隙。



