JPA的主键生成策略

主键生成策略

所谓的主键生成策略就是,自动生成主键列值的策略

JPA提供了四种主键生成策略

  1. IDENTITY:ID自增长策略。只能用于支持ID自增长的数据库。
@Id
//IDENTITY就是强制使用ID自增长策略,只能用于支持ID自增长的数据库
@GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="cust_id")  
    private Long custId;// '客户编号(主键)', 
  1. SEQUENCE:序列生成策略。指定使用SEQUENCE策略。和HIbernate的xml一样。如果在MySQL里面使用一个表模拟序列,如果使用在Oracle里面直接使用序列。

    用于有序列的数据库,如Oracle

@Id
/**
 * strategy:设置策略的名字
 * generator:指定使用哪个策略构造器
 */
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq_cust")
/**
 * @SequenceGenerator:用于声明一个序列 的策略构造器
 * name:构造器的名字
 * allocationSize:步长
 * initialValue:初始的大小
 * sequenceName:序列名(如果在MySQL里面就是序列模拟表的表名)
 */
@SequenceGenerator(name="seq_cust",allocationSize=1,initialValue=1,sequenceName="seq_customer")
//注意,如果属性名和字段同名,可以不配置@Column
@Column(name="cust_id")  
private Long custId;// '客户编号(主键)',
  1. TABLE策略,不管什么数据库,都是使用一个表来模拟序列。(了解)
    因为每创建一个表就会生成另一个序列表 太麻烦了
@Id
/**
 * strategy:设置策略的名字
 * generator:指定使用哪个策略构造器
 * TABLE策略:就是不管什么数据库使用一个表来模拟序列。
 * 由于MySQL是没有序列的,所有TABLE策略和SEQUENCE是一样。
 */
@GeneratedValue(strategy=GenerationType.TABLE,generator="table_cust")
/**
 * @TableGenerator:用于声明一个TABLE策略 的策略构造器
 * name:构造器的名字,唯一标识符,用于让@GeneratedValue调用
 * allocationSize:步长,每次增加的数
 * initialValue:初始的大小,ID值等于设置的初始值+1
 * 如果需要从1开始,那么设置为0.
 * sequenceName:序列名(如果在MySQL里面就是序列模拟表的表名)
* 注意:主键值等于开始位置+1
 */
@TableGenerator(name="table_cust",allocationSize=1,initialValue=0,table="seq_customer")
//注意,如果属性名和字段同名,可以不配置@Column
@Column(name="cust_id")  
private Long custId;// '客户编号(主键)',
  1. AUTO(了解):由框架决定根据不同的数据库指定一个策略。由于结果的不固定性。基本上没有人使用。,有时候会生成一个Table策略,太不固定了
@Id
/**
 * strategy:设置策略的名字
 * generator:指定使用哪个策略构造器
 */
@GeneratedValue(strategy=GenerationType.AUTO)
//注意,如果属性名和字段同名,可以不配置@Column
@Column(name="cust_id")  
private Long custId;// '客户编号(主键)',

你可能感兴趣的:(Jpa)