JPA 主键生成策略
2014-07-22 14:51
323 查看
JPA 主键生成策略:
JPA 中有四种生成策略,生成规则由@GeneratedValue设定的
@GeneratedValue源码:
1、通过容器(程序)自动生成--GenerationType.AUTO
GenerationType.AUTO默认生成策略,由程序控制生成,可省略不写。
2、通过数据库自动增长字段生成,这种情况下需要数据库提供对自增长字段的支持,如SQL Server、MySQL、DB2、Derby等。
将当前主键的值单独保存到一个数据库的表中,主键的值每次都是从指定的表中查询来获得,
这种生成主键的方式也是很常用的。这种方法生成主键的策略可以适用于任何的数据库,
不必担心不同数据库不兼容造成的问题。
sql:
TableGenerator源码:
name属性表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中。
table属性表示表生成策略所持久化的表名,例如,这里表使用的是数据库中的“tb_generator”。
catalog属性和schema具体指定表所在的目录名或是数据库名。
pkColumnName属性的值表示在持久化表中,该主键生成策略所对应键值的名称。例如在“tb_generator”中将“gen_name”作为主键的键值
valueColumnName属性的值表示在持久化表中,该主键当前所生成的值,它的值将会随着每次创建累加。例如,在“tb_generator”中将“gen_value”作为主键的值
pkColumnValue属性的值表示在持久化表中,该生成策略所对应的主键。例如在“tb_generator”表中,将“gen_name”的值为“USER_PK”。
initialValue表示主键初识值,默认为0。
allocationSize表示每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50。
UniqueConstraint唯一性约束,只用于表生成的时候。
JPA 中有四种生成策略,生成规则由@GeneratedValue设定的
@GeneratedValue源码:
@Target({METHOD, FIELD}) @Retention(RUNTIME) public @interface GeneratedValue { GenerationType strategy() default AUTO; /**可选,结合@SequenceGenerator、 @TableGenerator 使用*/ String generator() default ""; } package javax.persistence; public enum GenerationType { TABLE, SEQUENCE, IDENTITY, AUTO }
1、通过容器(程序)自动生成--GenerationType.AUTO
GenerationType.AUTO默认生成策略,由程序控制生成,可省略不写。
2、通过数据库自动增长字段生成,这种情况下需要数据库提供对自增长字段的支持,如SQL Server、MySQL、DB2、Derby等。
@Id @GeneratedValue(strategy= GenerationType.IDENTITY) private long id;mysql:
id bigint(10) primary key AUTO_INCREMENT not null,3、通过序列号生成主键,前提是数据库支持序列,如oracle
@Entity // Define a sequence - might also be in another class: @SequenceGenerator(name="seq", initialValue=1, allocationSize=100) public class EntityWithSequenceId { // Use the sequence that is defined above: @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq") @Id long id; }4、通过数据库表字段保存主键
将当前主键的值单独保存到一个数据库的表中,主键的值每次都是从指定的表中查询来获得,
这种生成主键的方式也是很常用的。这种方法生成主键的策略可以适用于任何的数据库,
不必担心不同数据库不兼容造成的问题。
sql:
CREATE TABLE tb_generator ( id int(20) NOT NULL auto_increment, gen_name VARCHAR(255) NOT NULL, gen_value int(20) NOT NULL, PRIMARY KEY(id) )插入记录,提供生成主键:
INSERT INTO tb_generator(gen_name, gen_value) VALUES ('USER_PK', 1);设置主键生成器:
@Id @GeneratedValue(strategy = GenerationType.TABLE,generator="user_gen") @TableGenerator(name = "user_gen", table="tb_generator", pkColumnName="gen_name", valueColumnName="gen_value", pkColumnValue="USER_PK", allocationSize=1 )
TableGenerator源码:
@Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) public @interface TableGenerator { String name(); String table() default ""; String catalog() default ""; String schema() default ""; String pkColumnName() default ""; String valueColumnName() default ""; String pkColumnValue() default ""; int initialValue() default 0; int allocationSize() default 50; UniqueConstraint[] uniqueConstraints() default {}; }其中属性说明:
name属性表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中。
table属性表示表生成策略所持久化的表名,例如,这里表使用的是数据库中的“tb_generator”。
catalog属性和schema具体指定表所在的目录名或是数据库名。
pkColumnName属性的值表示在持久化表中,该主键生成策略所对应键值的名称。例如在“tb_generator”中将“gen_name”作为主键的键值
valueColumnName属性的值表示在持久化表中,该主键当前所生成的值,它的值将会随着每次创建累加。例如,在“tb_generator”中将“gen_value”作为主键的值
pkColumnValue属性的值表示在持久化表中,该生成策略所对应的主键。例如在“tb_generator”表中,将“gen_name”的值为“USER_PK”。
initialValue表示主键初识值,默认为0。
allocationSize表示每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50。
UniqueConstraint唯一性约束,只用于表生成的时候。
相关文章推荐
- hibernate、JPA主键生成策略及如何选择
- JPA注解主键生成策略-UUID
- JPA主键生成策略
- JPA基础(四):第一个JPA实例与JPA主键生成策略
- 使用注解风格学习Hibernate和JPA的主键生成策略
- JPA实体注解与hibernate主键生成策略
- Jpa主键UUID生成策略
- 基于annotation的JPA和hibernate主键生成策略
- Hibernate使用JPA主键生成策略
- JPA实体注解与hibernate主键生成策略
- Java 持久化技术规范(JPA)中的主键生成策略
- JPA使用Hibernate实现,使用UUID.主键的生成策略.
- JPA 菜鸟教程 19 jpa uuid主键生成策略
- Java 持久化技术规范(JPA )中的主键生成策略
- 使用注解风格学习Hibernate和JPA的主键生成策略
- JPA主键生成策略
- Java 持久化技术规范(JPA )中的主键生成策略
- 4、JPA table主键生成策略(在JPA中table策略是首推!!!)
- JPA主键生成策略
- JPA实体注解与hibernate主键生成策略