【发布时间】:2011-12-12 11:54:49
【问题描述】:
这两种自动价值生成策略有什么区别?
1. @GeneratedValue
2. @GeneratedValue(strategy=IDENTITY)
【问题讨论】:
标签: java hibernate jakarta-ee
这两种自动价值生成策略有什么区别?
1. @GeneratedValue
2. @GeneratedValue(strategy=IDENTITY)
【问题讨论】:
标签: java hibernate jakarta-ee
如下:
AUTO 指示持久性提供程序应为特定数据库选择适当的策略。
身份 指示持久性提供者必须使用数据库标识列为实体分配主键。
序列 表示持久化提供者必须为使用数据库序列列的实体分配主键。
表格 表示持久化提供者必须使用底层数据库表为实体分配主键以确保唯一性。
请参阅此处的 API http://docs.oracle.com/javaee/5/api/javax/persistence/GenerationType.html
【讨论】:
如果不设置策略属性,则默认为AUTO。
来自 Hibernate 文档:
AUTO:根据底层数据库的能力选择 IDENTITY、SEQUENCE 或 TABLE。
【讨论】:
IDENTITY 生成器设为默认值。在这种情况下,AUTO 和 IDENTITY 将是相同的。
GeneratedValue 是一个 JPA 注释。我找不到 Hibernate 特定的 @GeneratedValue 注释 here。
区别在于@GeneratedValue 默认使用AUTO 策略,而@GeneratedValue(strategy=IDENTITY) 使用IDENTITY 策略
这里有不同的策略选项
AUTO - 指示持久性提供程序应为特定数据库选择适当的策略。
IDENTITY - 指示持久性提供程序必须使用数据库标识列为实体分配主键。
SEQUENCE - 指示持久性提供程序必须为使用数据库序列列的实体分配主键。
TABLE - 表示持久性提供程序必须使用底层数据库表为实体分配主键以确保唯一性。
【讨论】: