繁体   English   中英

不指定@TableGenerator时,跳过GeneratedValue(strategy = GenerationType.TABLE)的原因是什么?

[英]What's the reason behind the jumping GeneratedValue(strategy=GenerationType.TABLE) when not specifying a @TableGenerator?

为什么在使用@TableGenerator时确保在jvm重新启动后ID不会从1,2,...跳到32,xxx,65,xxx,...时需要添加allocationSize = 1?

是否有设计上的理由需要指定分配大小?

此代码段将产生跳跃的ID

@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;

这是修改后的代码段,可产生正确排序的ID

@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "account_generator")
@TableGenerator(name = "account_generator", initialValue = 1, allocationSize = 1)
private Long id;

出于性能原因,Hibernate缓存了一个ID块。 它从数据库中分配几个id,并保留它们,如果这些ID用完,它将从序列中分配另一个块(从而增加序列值)

我并不是说是这种情况,但这可能是Hibernate使用的基础生成器中的错误。 例如,请参见Hibernate论坛上的这篇文章 ,其中描述了一种奇怪的行为, New(3.2.3)Hibernate标识符生成器的注释中提到的问题或Jira中的现有问题。

我的建议是确定您的案例中使用的生成器,并搜索现有问题或打开一个新问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM