@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)
我认为第一行“id”是 1000,而不是 1,对吧?但是如果是 1,第二行应该是 101.... 谁能帮帮我一个笨蛋?
最佳答案
第一个值为 1 而不是 1001 的 Hibernate 错误 HHH-4228 ,状态为 Won't fix。在您的情况下正确的第一个值是 1001 而不是 1000,因为 initialValue
初始化存储返回的 last 值的列(而不是要返回的下一个值)。
在 persistence.xml 中使用以下内容(错误报告中也有建议)将解决第一个值的问题:
<property name="hibernate.id.new_generator_mappings" value="true"/>
allocationSize
的含义可能在问题中被误解了。这不是递增的步骤。这意味着从表中的一个数据库查询分配了多少个值。这是为了避免每次在新实体需要 id 值时进行额外查询的优化。
副作用是应用程序的重新启动通常会导致序列出现漏洞:
- 初始值 = 1000,分配大小 = 100
- 使用值 1001(=> valueColumn 中的值更新为 1100)。
- 关闭并启动应用程序
- 下一个值将是 1101,而不是 1002。
关于mysql - Hibernate JPA不支持@TableGenerator的 "initialValue"元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13303338/