【问题标题】:Difference between Hibernate Automatic value generation strategies?Hibernate 自动值生成策略之间的区别?
【发布时间】:2011-12-12 11:54:49
【问题描述】:

这两种自动价值生成策略有什么区别?

 1. @GeneratedValue
 2. @GeneratedValue(strategy=IDENTITY)

【问题讨论】:

标签: java hibernate jakarta-ee


【解决方案1】:

如下:

AUTO 指示持久性提供程序应为特定数据库选择适当的策略。

身份 指示持久性提供者必须使用数据库标识列为实体分配主键。

序列 表示持久化提供者必须为使用数据库序列列的实体分配主键。

表格 表示持久化提供者必须使用底层数据库表为实体分配主键以确保唯一性。

请参阅此处的 API http://docs.oracle.com/javaee/5/api/javax/persistence/GenerationType.html

【讨论】:

    【解决方案2】:

    如果不设置策略属性,则默认为AUTO。 来自 Hibernate 文档:
    AUTO:根据底层数据库的能力选择 IDENTITY、SEQUENCE 或 TABLE。

    【讨论】:

    • 这两者之间必须有区别,即自动和身份。
    • 可以有所不同,但这不是必须的要求。 JPA Provider 可以将IDENTITY 生成器设为默认值。在这种情况下,AUTOIDENTITY 将是相同的。
    • 问题是关于hibernate,而不是JPA,至少它被标记为hibernate。
    • @david Hibernate 是一个 JPA 提供者(我指的是最新版本)。此外,GeneratedValue 是一个 JPA 注释。我找不到 Hibernate 特定的 @GeneratedValue 注释 here
    • @David - 当然。总结一下“Hibernate 提供了各种生成策略,让我们首先探索最常见的恰好被 JPA 标准化。”来自您指出的来源。
    【解决方案3】:

    区别在于@GeneratedValue 默认使用AUTO 策略,而@GeneratedValue(strategy=IDENTITY) 使用IDENTITY 策略

    这里有不同的策略选项

    AUTO - 指示持久性提供程序应为特定数据库选择适当的策略。

    IDENTITY - 指示持久性提供程序必须使用数据库标识列为实体分配主键。

    SEQUENCE - 指示持久性提供程序必须为使用数据库序列列的实体分配主键。

    TABLE - 表示持久性提供程序必须使用底层数据库表为实体分配主键以确保唯一性。

    【讨论】:

      猜你喜欢
      • 2012-06-06
      • 2023-03-29
      • 2016-05-03
      • 2020-03-13
      • 2018-06-28
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 2022-01-26
      相关资源
      最近更新 更多