Jpa即hibernate的主键生成策略

 

分类:JVM数据库java开发笔记springJpa
标签:数据库hqlPostgreSQLspringboot主键生成策略jpahibernate

2019-09-15 19:46:07.0 阅读原文

在jpa中,定义主键如下:

@Entity
public class Person {

    @Id
    // 声明一个策略通用生成器
    @GenericGenerator(name = "inc", strategy ="increment")
    // 用generator属性指定要使用的策略生成器。
    @GeneratedValue(generator = "inc")
    private long id;
    private String name;

使用一个@Id注解就可以定义一个主键,但主键生成的策略定义却有很多方式:

Jpa的@GeneratedValue直接指定主键策略

使用 Jpa的@GeneratedValue直接指定主键策略 ,如下:

@GeneratedValue(strategy = GenerationType.AUTO)

其中strategy是一个枚举类GenerationType,有如下四种值:

AUTO 持久化层程序会自动选择一个合适的主键生成策略,策略与具体的数据库有关
IDENTITY 主键由数据库生成, 采用数据库自增长, Oracle不支持这种方式
SEQUENCE 通过数据库的序列产生主键, MYSQL  不支持
TABLE 提供特定的数据库产生主键, 该方式更有利于数据库的移植

eg:AUTO 类型生成的主键,在mysql中需要程序指定;但在PostgreSQL中,会自动创建一个序列,从序列中获取主键。

Jpa的@GenericGenerator使用主键生成策略

通过以下两步可以指定:

  1. @GenericGenerator声明一个主键生成策略
  2. @GeneratedValue 使用这个策略

示例如下:

    // 声明一个策略通用生成器
    @GenericGenerator(name = "inc", strategy ="increment")
    // 用generator属性指定要使用的策略生成器。
    @GeneratedValue(generator = "inc")
    private long id;

其中jpa默认的主键生成策略以及其对应的类如下:

"uuid2", UUIDGenerator.class
"guid", GUIDGenerator.class
"uuid", UUIDHexGenerator.class
"uuid.hex", UUIDHexGenerator.class
"assigned", Assigned.class
"identity", IdentityGenerator.class
"select", SelectGenerator.class
"sequence", SequenceStyleGenerator.class
"seqhilo", SequenceHiLoGenerator.class
"increment", IncrementGenerator.class
"foreign", ForeignGenerator.class
"sequence-identity", SequenceIdentityGenerator.class
"enhanced-sequence", SequenceStyleGenerator.class
"enhanced-table", TableGenerator.class


分类:JVM数据库java开发笔记springJpa
标签:数据库hqlPostgreSQLspringboot主键生成策略jpahibernate

原文链接: Jpa即hibernate的主键生成策略 2019-09-15 19:46:07.0
Jpa即hibernate的主键生成策略  jpa-ji-hibernate-de