2

@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.... 谁能帮帮我这个笨蛋?

4

1 回答 1

7

第一个值是 1 而不是 1001 是 Hibernate bug HHH-4228,状态为Won't fix。在您的情况下,正确的第一个值是 1001 而不是 1000,因为initialValue初始化存储返回的最后一个值的列(而不是要返回的下一个值)。

在 persistence.xml 中使用以下内容(如错误报告中所建议的)将解决第一个值的问题:

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

的含义allocationSize很可能在问题中被误解。这不是增加的步骤。这意味着从表中的一个数据库查询分配了多少值。这是相当优化的,以避免每次新实体需要 id 值时进行额外查询。

副产品是应用程序的重新启动通常会导致序列出现漏洞:

  1. 初始值 = 1000,分配大小 = 100
  2. 使用值 1001(=> valueColumn 中的值更新为 1100)。
  3. 关闭并启动应用程序
  4. 下一个值将是 1101,而不是 1002。
于 2012-11-09T21:00:52.250 回答