主键生成策略
所谓的主键生成策略就是,自动生成主键列值的策略
JPA提供了四种主键生成策略
- IDENTITY:ID自增长策略。只能用于支持ID自增长的数据库。
@Id
//IDENTITY就是强制使用ID自增长策略,只能用于支持ID自增长的数据库
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="cust_id")
private Long custId;// '客户编号(主键)',
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;// '客户编号(主键)',
- 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;// '客户编号(主键)',
- AUTO(了解):由框架决定根据不同的数据库指定一个策略。由于结果的不固定性。基本上没有人使用。,有时候会生成一个Table策略,太不固定了
@Id
/**
* strategy:设置策略的名字
* generator:指定使用哪个策略构造器
*/
@GeneratedValue(strategy=GenerationType.AUTO)
//注意,如果属性名和字段同名,可以不配置@Column
@Column(name="cust_id")
private Long custId;// '客户编号(主键)',