赞
踩
hibernate主键标识为@Id, 其生成规则由@GeneratedValue设定的
@GeneratedValue注解的strategy属性指定具体的策略基本使用的有四种策略
规则
表示自增策略,主键由数据库生成(主要是自动增长型)
比如:MYSQL可以在创建表时声明"auto_increment" 来指定主键自增长。
该策略在大部分数据库中都提供了支持(指定方法或关键字可能不同),但还是有少数数据库不支持,所以可移植性略差。使用自增长主键生成策略是只需要声明strategy = GenerationType.IDENTITY即可。
用法:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long custId;
规则:
根据底层数据库的序列来生成主键,条件是数据库支持序列。当有些数据库不支持自增的时候就使序列策略。只有部分数据库(Oracle,PostgreSQL,DB2)支持序列对象,所以该策略一般不应用于其他数据库。类似的,该策略一般与另外一个注解一起使用@SequenceGenerator,@SequenceGenerator注解指定了生成主键的序列.然后JPA会根据注解内容创建一个序列(或使用一个现有的序列)。如果不指定序列,则会自动生成一个序列SEQ_GEN_SEQUENCE。
用法:
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="payablemoney_seq") @SequenceGenerator(name="payablemoney_seq", sequenceName="seq_payment") 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; }
主键由程序控制
用法:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long custId;
和table的模式是差不多的也是会创建一张表来控制主键的生成,指定下一条记录的id
规则
使用一个特定的数据库表格来保存主键,开启这个模式之后他会自动生成一个表来控制主键的生成,这张表中指定了下一个创建的记录的id
用法
① 只是指定策略
@Id//声明当前私有属性为主键
@GeneratedValue(strategy = GenerationType.TABLE)
@Column(name="cust_id") //指定和表中cust_id字段的映射关系,name表示数据库字段的名称
private Long custId
库就会建立如下的一张表,里面记录了下一次添加记录需要用的id,其中sequence_name使用來保存主键名的字段(默认为default),而next_val是主键值,也就是下一次添加的记录的id
② 手动指定存储的表和字段以及递增步长
@Id//声明当前私有属性为主键
@GeneratedValue(strategy = GenerationType.TABLE, generator = "id_sequence")
@TableGenerator(name = "id_sequence", allocationSize = 1, table = "sequence_table", pkColumnName = "name", valueColumnName = "value",pkColumnValue = "customer")
@Column(name="cust_id") //指定和表中cust_id字段的映射关系,name表示数据库字段的名称
private Long custId
其中@GeneratedValue中strategy是指定策略,generator是指定表格的生成策略的名称
@TableGenerator注解中的含义
生成的表
表中的数据
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。