@GeneratedValue(strategy=“IDENTITY”) vs. @GeneratedValue(strategy=“SEQUENCE”)

2022-09-01 01:29:31

我是休眠的新手。我不了解以下两个主要键生成策略:

  1. 身份
  2. 序列

有人可以解释一下这两者是如何工作的,这两者之间有什么区别吗?


答案 1

引用 Java 持久性/身份和排序

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

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

和:

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

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


答案 2

推荐