Hibernate JPA中不支持@TableGenerator的“initialValue”元素吗?

时间:2012-11-09 06:42:54

标签: mysql hibernate jpa-2.0

@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)

a table named "employee"

我认为第一行'id'是1000而不是1,对吧?但是如果它是1,那么第二行应该是101 .... 谁能帮助我成为一个愚蠢的人?

1 个答案:

答案 0 :(得分:7)

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

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

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

allocationSize的含义可能会被误解。这不是增加的步骤。它表示从表中使用一个数据库查询分配了多少个值。这是相当优化的,以便每当新实体需要id值时避免额外的查询。

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

  1. initialValue = 1000,allocationSize = 100
  2. 使用值1001(= valueColumn中的&gt;值更新为1100)。
  3. 关闭并启动应用程序
  4. 下一个值将是1101,而不是1002。