【问题标题】:@GeneratedValue(strategy="IDENTITY") vs. @GeneratedValue(strategy="SEQUENCE")@GeneratedValue(strategy="IDENTITY") 与 @GeneratedValue(strategy="SEQUENCE")
【发布时间】:2012-02-15 19:48:05
【问题描述】:

我是休眠新手。我不明白以下两种主键生成策略:

  1. 身份
  2. 序列

有人能解释一下这两者是如何工作的吗?这两者有什么区别?

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    引用Java Persistence/Identity and Sequencing:

    Identity 排序使用数据库中的特殊 IDENTITY 列,以允许数据库在插入行时自动为对象分配 id。许多数据库都支持标识列,例如 MySQL、DB2、SQL Server、Sybase 和 Postgres。 Oracle 不支持 IDENTITY 列,但可以通过使用序列对象和触发器来模拟它们。

    用简单的英语:您最多将表中的一个 ID 列标记为 IDENTITY。数据库引擎会自动为您设置下一个可用值。

    还有:

    序列对象使用特殊数据库对象来生成ID。序列对象仅在某些数据库中受支持,例如 Oracle、DB2 和 Postgres。通常,SEQUENCE 对象具有名称、INCREMENT 和其他数据库对象设置。每次选择 <sequence>.NEXTVAL 时,序列都会增加 INCREMENT。

    序列更灵活,也稍微复杂一些。您在数据库中的表、触发器等旁边定义了一个额外的对象,称为 sequences。序列基本上被命名为计数器,您可以在查询中的任何位置使用。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多