Hibernate 中 sequence 和 identity 的区别


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

  • GenerationType.AUTO
  • GenerationType. IDENTITY
  • GenerationType.SEQUENCE 
  • GenerationType.TABLE

GenerationType. IDENTITY − 在 identity 中,数据库负责自动生成主键。插入一行而不为 ID 指定值,并在插入行后,向数据库请求最后生成的 ID。Oracle 11g 不支持 identity 主键生成器。此功能在 Oracle 12c 中受支持。

GenerationType. SEQUENCE − 在 sequence 中,我们首先向数据库请求序列的下一组值,然后使用返回的序列 ID 插入行。

序号
关键点
GenerationType. IDENTITY
GenerationType.SEQUENCE

1

基础

数据库负责自动生成主键

我们首先向数据库请求序列的下一组值,然后使用返回的序列 ID 插入行。

2

性能

它比 sequence 主键生成器快

它比 identity 主键生成器略慢

3

数据库支持

Oracle 11g 不支持 identity 主键生成器

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;
   }
}

更新于:2020年1月21日

9K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告