3.2.2.5. Hibernate 标识符自动生成值
Hibernate 3.5 引入了名为
hibernate.id.new_generator_mappings
的核心属性,它指定在使用 @GeneratedValue
时如何生成标识符或序列号。在 JBoss EAP 6 里,这个属性的默认值是:
- 当您部署原声 Hibernate 应用程序时,这个默认值是
false
。 - 当您部署 JPA 应用程序时,这个默认值是
true
。
新应用程序准则
使用 @GeneratedValue
的新应用程序应该设置 hibernate.id.new_generator_mappings
属性为 true
。这是首选的设置,因为对于不同的数据库它更容易移植。在多数情况下,它的效率更高;在某些情况下,它解决了和 JPA 2 规格的兼容问题。
- 对于新的 JPA 应用程序,JBoss EAP 6 默认
hibernate.id.new_generator_mappings
属性为true
且不应该被改变。 - 对于新的原生 Hibernate 应用程序,JBoss EAP 6 默认
hibernate.id.new_generator_mappings
属性为false
。您应该设置它为true
。
现有的 JBoss EAP 5 应用程序的准则
当移植到 JBoss EAP 6 时,现有的使用 @GeneratedValue
注解的应用程序应该确保使用相同的生成器来为新条目创建主键值。
- 对于现有的 JPA 应用程序,JBoss EAP 6 默认
hibernate.id.new_generator_mappings
属性为true
。您应该在persistence.xml
里将这个属性设置为false
。 - 对于现有的原生 Hibernate 应用程序,JBoss EAP 6 默认
hibernate.id.new_generator_mappings
属性为false
且不应该被改变。
关于这些属性设置的更多信息,请参考 第 3.2.2.3 节 “持久化单元属性”。