SpringData专题(三)-JPA中的主键生成策略(1)

JPA中主键生成策略

通过annotation(注解)来映射hibernate实体的,基于annotation的hibernate主键标识为@Id, 其生成规则由@GeneratedValue设定的.这里的**@id@GeneratedValue**都是JPA的标准用法。
JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO。

1.IDENTITY

  • 具体说明如下:
    IDENTITY:主键由数据库自动生成(主要是自动增长型)

    使用数据库的自增策略:Mysql**(auto_increment)**

    SqlServer (IDENTITY)

    适用于:Mysql、SQLServer

  • 用法:

@Id  
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long custId;

2.SEQUENCE

  • 具体说明如下:
    SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列

    使用于Oracle数据库,Oracle数据库没有自增的设置,需要序列完成自增!

  • 用法:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator="payablemoney_seq")
@SequenceGenerator(name="payablemoney_seq", sequenceName="seq_payment",initialValue = 0,allocationSize = 1)
@Column(name="p_id")
private Long custId;
//@SequenceGenerator源码中的定义
@Target({TYPE, METHOD, FIELD})   
@Retention(RUNTIME)  
public @interface SequenceGenerator {  
   //表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中
   String name();  
   //属性表示生成策略用到的数据库序列名称。
   String sequenceName() default "";  
   //表示主键初识值,默认为0
   int initialValue() default 0;  
   //表示每次主键值增加的大小,例如设置1,则表示每次插入新记录后自动加1,默认为50
   int allocationSize() default 50;  
}

3.AUTO

  • 具体说明如下:
    AUTO:主键由程序控制
  • 用法:
@Id  
@GeneratedValue(strategy = GenerationType.AUTO)  
private Long custId;

4.TABLE(用的比较少)

  • 具体说明如下:
    将当前主键的值单独保存到一个数据库的表中,主键的值每次都是从指定的表中查询来获得 这种方法生成主键的策略可以适用于任何数据库,不必担心不同数据库不兼容造成的问题。
  • 用法:
//使用table生成主键
@TableGenerator(name="ID_GENERATOR",
                table="JPA_ID_GENERATORS", 
                pkColumnName="PK_NAME",
                pkColumnValue="CUSTOMER_ID",
                valueColumnName="PK_VALUE",
                allocationSize=100
               )

@GeneratedValue(strategy=GenerationType.TABLE,generator="ID_GENERATOR")
@Id
private Long custId;

其中:

1、name 属性表示该主键生成策略的名称,它被引用在@GeneratedValue中设置的generator 值中

2、table 属性表示表生成策略所持久化的表名

3、pkColumnName 属性的值表示在持久化表中,该主键生成策略所对应键值的名称

4、valueColumnName 属性的值表示在持久化表中,该主键当前所生成的值,它的值将会随着每次创建累加

5、pkColumnValue 属性的值表示在持久化表中,该生成策略所对应的主键

6、allocationSize 表示每次主键值增加的大小, 默认值为 50

关系图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值