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;
}
}
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP