Spring Boot 2系列(二十六):JPA @GeneratedValue四种主键生成策略

  JPA规范中主键生成策略@GeneratedValue四种用法:TABLE,SEQUENCE,IDENTITY,AUTO。 

  Spring Boot集成 JPA,在实体类映射表主键列的属性上使用**@GeneratedValue**注解来指示主键生成策略,主键生成策略的类型由枚举类GenerationType的值确定。

@GeneratedValue

实体类上主键生成策略注解@GeneratedValue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package javax.persistence;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import static javax.persistence.GenerationType.AUTO;

@Target({METHOD, FIELD})
@Retention(RUNTIME)

public @interface GeneratedValue {

//没有显式指定主键策略,默认使用 AUTO,JPA自动选择合适的策略
GenerationType strategy() default AUTO;

String generator() default "";
}

GenerationType

主键生成类型源码.

1
2
3
4
5
6
7
8
9
10
11
12
package javax.persistence;

public enum GenerationType {
//使用一个特定的数据库表格来保存主键,在使用时从该表取数据做为主键(在分布式系统需要全局唯一有序的主键时常使用)。
TABLE,
//由底层数据库的序列来生成主键,条件是数据库支持序列。
SEQUENCE,
//由数据库自动生成主键,主要在自增ID列使用
IDENTITY,
//主键由程序控制,在代码层必须给映射主键的字段set值
AUTO
}

数据库支持类型

  1. MySQL:支持TABLE,IDENTITY,AUTO;不支持SEQUENCE
  2. Oracle:支持TABLE,SEQUENCE,AUTO;不支持IDENTITY

[参考:]
理解JPA注解@GeneratedValue
@GeneratedValue 四种标准用法
JPA主键生成器和主键生成策略

Spring Boot 2系列(二十六):JPA @GeneratedValue四种主键生成策略

http://blog.gxitsky.com/2018/07/26/SpringBoot-26-jpa-primary-keys/

作者

光星

发布于

2018-07-26

更新于

2022-06-17

许可协议

评论