@TableGenerator(name="Emp_Gen",table="ID_GEN", pkColumnName = "GEN_NAME",pkColumnValue = "Employee_GEN",valueColumnName = "GEN_VAL",initialValue = 1000,allocationSize = 100)
一切正常,但initialValue无效。
下面是名为“employee”的表(注意:使用MySql,Hibernate JPA)
我想第一排是1000,不是1,对吧?但如果是1,第二个应该是101。。。。
谁能帮我这个笨蛋?

最佳答案

第一个值是1,而不是1001,这是Hibernate bugHHH-4228,状态无法修复。正确的第一个值是1001而不是1000,因为initialValue初始化存储最后返回的值(而不是下一个要返回的值)的列。
在persistence.xml中使用以下命令(如bug report中所建议的)将修复第一个值的问题:

<property name="hibernate.id.new_generator_mappings" value="true"/>

allocationSize的含义可能被误解。这不是逐步增加。这意味着一个数据库查询从表中分配了多少值。这是相当优化的,以避免每次需要新实体的id值时都进行额外的查询。
副产品是重新启动应用程序通常会导致序列出现漏洞:
initialValue=1000,allocationSize=100
使用值1001(=>valueColumn中的值更新为1100)。
关闭和启动应用程序
下一个值是1101,而不是1002。

10-08 07:38