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