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;// '客户编号(主键)',
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值