JPA主键生成策略TABLE,SEQUENCE,IDENTITY,AUTO

2025-10-30 04:30:25

1、1,  IDENTITY:主键由数据库自动生成(主要是自动增长型) 

用法:

@Id  

@GeneratedValue(strategy = GenerationType.IDENTITY) 

private Long custId;

2、2,  SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。 

用法:

@Id  

@GeneratedValue(strategy = GenerationType.SEQUENCE,generator="payablemoney_seq")  

@SequenceGenerator(name="payablemoney_seq", sequenceName="seq_payment")  

说明:

@SequenceGenerator源码中的定义 

@Target({TYPE, METHOD, FIELD})   

@Retention(RUNTIME)  

public @interface SequenceGenerator {  

String name();  

   String sequenceName() default "";  

   int initialValue() default 0;  

   int allocationSize() default 50;  

}  

name:表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中。  sequenceName:属性表示生成策略用到的数据库序列名称。  initialValue:表示主键初识值,默认为0。  allocationSize:表示每次主键值增加的大小,例如设置1,则表示每次插入新记录后自动加1,默认为50。

JPA主键生成策略TABLE,SEQUENCE,IDENTITY,AUTO

3、3, AUTO:主键由程序控制。 

用法:

@Id  

@GeneratedValue(strategy = GenerationType.AUTO) 

JPA主键生成策略TABLE,SEQUENCE,IDENTITY,AUTO

4、4,TABLE:使用一个特定的数据库表格来保存主键(了解)

用法:

@Id  

@GeneratedValue(strategy = GenerationType.TABLE, generator="payablemoney_gen")  

@TableGenerator(name = "pk_gen",  

    table="tb_generator",  

    pkColumnName="gen_name",  

    valueColumnName="gen_value",  

    pkColumnValue="PAYABLEMOENY_PK",  

    allocationSize=1  

)

这里应用表tb_generator,定义为 :

CREATE TABLE  tb_generator (  

  id NUMBER NOT NULL,  

  gen_name VARCHAR2(255) NOT NULL,  

  gen_value NUMBER NOT NULL,  

  PRIMARY KEY(id)  

插入纪录,供生成主键使用:

INSERT INTO tb_generator(id, gen_name, gen_value)VALUES (1,PAYABLEMOENY_PK', 1);

在主键生成后,这条纪录的value值,按allocationSize递增。

@TableGenerator的定义:

@Target({TYPE, METHOD, FIELD})   

@Retention(RUNTIME)  

public @interface TableGenerator {  

  String name();  

  String table() default "";  

  String catalog() default "";  

  String schema() default "";  

  String pkColumnName() default "";  

  String valueColumnName() default "";  

  String pkColumnValue() default "";  

  int initialValue() default 0;  

  int allocationSize() default 50;  

  UniqueConstraint[] uniqueConstraints() default {};  

其中属性说明:  name:

表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中。  table:

表示表生成策略所持久化的表名,例如,这里表使用的是数据库中的“tb_generator”。  catalog和schema:

具体指定表所在的目录名或是数据库名。  pkColumnName:

属性的值表示在持久化表中,该主键生成策略所对应键值的名称。例如在“tb_generator”中将“gen_name”作为主键的键值  valueColumnName:

属性的值表示在持久化表中,该主键当前所生成的值,它的值将会随着每次创建累加。例如,在“tb_generator”中将“gen_value”作为主键的值  pkColumnValue:

属性的值表示在持久化表中,该生成策略所对应的主键。例如在“tb_generator”表中,将“gen_name”的值为“CUSTOMER_PK”。  initialValue:

表示主键初识值,默认为0。  allocationSize:

表示每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50。  UniqueConstraint:

与@Table标记中的用法类似。 

JPA主键生成策略TABLE,SEQUENCE,IDENTITY,AUTO

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢