[英]Manually insert Data from database in table which has hibernate_sequence @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.