mysql - Hibernate JPA不支持@TableGenerator的 "initialValue"元素吗?

标签 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 而不是 1001 的 Hibernate 错误 HHH-4228 ,状态为 Won't fix。在您的情况下正确的第一个值是 1001 而不是 1000,因为 initialValue 初始化存储返回的 last 值的列(而不是要返回的下一个值)。

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

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

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

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

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

关于mysql - Hibernate JPA不支持@TableGenerator的 "initialValue"元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13303338/

相关文章:

sql - 在 MySQL 子查询计数方面需要一些帮助

mysql - 2个表之间的简单关系

java - Hibernate:单向,去除多对多关联

java - 使用 Criteria API 的动态 JPA 2.0 查询

mysql - 为什么 MySQL Workbench 为 FULLTEXT 索引创建错误的语法?

php - 警告 : array_values() expects parameter 1 to be array, 给出 null

java - 是否可以在 2 个对象之间建立 @OneToOne 关系,但不能让 child 自动保留在 Hibernate 中

java - 无法加入@JoinColumn(即@Id)

java - Spring 数据 JPA : How can Query return Non- Entities Objects or List of Objects?

hibernate - JPA/hibernate : Can you create a join query on an specific MapKey?