@GeneratedValue(strategy =“IDENTITY”)与@GeneratedValue(strategy =“SEQUENCE”)

时间:2012-01-21 17:34:04

标签: java hibernate jpa

我是hibernate的新手。我不明白以下两个主键生成策略:

  1. 身份
  2. 序列
  3. 有人可以解释一下这两者是如何工作的,这两者有什么区别?

1 个答案:

答案 0 :(得分:57)

引用Java Persistence/Identity and Sequencing

  

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

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

  

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

序列更灵活,更复杂。您可以在数据库中定义一个名为 sequences 的表,触发器等旁边的额外对象。序列基本上是命名计数器,可以在查询内的任何地方使用。