Hibernate中序列和身份之间的区别

Hibernate或JPA支持4种不同类型的主键生成器。这些生成器用于在数据库中插入行时生成主键。以下是主键生成器  -

  • GenerationType.AUTO

  • GenerationType。身份

  • GenerationType.SEQUENCE 

  • GenerationType.TABLE

GenerationType。IDENTITY-在identity中,数据库负责自动生成主键。 插入一行而不指定ID的值,然后在插入该行之后,向数据库询问最后生成的ID。Oracle 11g不支持身份键生成器。Oracle 12c支持此功能。 

GenerationType。序列-依次,我们首先向数据库询问序列的下一组,然后插入具有返回序列ID的行。 

序号

GenerationType。身份
GenerationType.SEQUENCE

1个

基本的 

 数据库负责自动生成主键

我们首先要求数据库提供下一个序列集,然后插入带有返回序列ID的行。

2

性能 

它比序列键生成器快 

比身份键生成器慢一点

3

数据库支持 

Oracle 11g不支持身份键生成器

Oracle 11g确实支持SEQUENCE键生成器

GenerationType.IDENTITY的示例

@Entity
public class User {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   Integer id;
   String name;
   public Integer getId() {
      return id;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
}

GenerationType.SEQUENCE的示例

@Entity
public class User {
   @Id
   @GeneratedValue(strategy = GenerationType.SEQUENCE)
   Integer id;
   String name;  
   public Integer getId() {
      return id;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
}