JPA 主键生成策略
来源:互联网 发布:网红阿沁的淘宝店 编辑:程序博客网 时间:2024/05/16 00:40
JPA 主键生成策略:
JPA 中有四种生成策略,生成规则由@GeneratedValue设定的
@GeneratedValue源码:
1、通过容器(程序)自动生成--GenerationType.AUTO
将当前主键的值单独保存到一个数据库的表中,主键的值每次都是从指定的表中查询来获得,
这种生成主键的方式也是很常用的。这种方法生成主键的策略可以适用于任何的数据库,
不必担心不同数据库不兼容造成的问题。
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。
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唯一性约束,只用于表生成的时候。
0 0
- JPA主键生成策略
- JPA 主键生成策略
- JPA主键生成策略
- JPA主键生成策略
- jpa 主键生成策略
- JPA主键生成策略
- JPA 映射主键生成策略
- Jpa主键UUID生成策略
- JPA的主键生成策略
- JPA主键生成器和主键生成策略
- JPA主键生成器和主键生成策略
- JPA主键生成器和主键生成策略
- JPA注解生成主键策略详解
- JPA主键生成策略 @GeneratedValue @SequenceGenerator @GenericGenerator
- JPA注解主键生成策略-UUID
- Hibernate和JPA的主键生成策略
- hibernate JPA注解主键生成策略
- jpa和hibernate的主键生成策略
- hdu4628 状态压缩搜索or状态dp
- intellij 左右窗口联动
- hdu 1862 EXCEL排序
- Android使用自带JSONObject解析JSON数据 - jCuckoo的专栏 - 博客频道 - CSDN.NET
- 手动进行Excel数据和MySql数据转换
- JPA 主键生成策略
- proc文件系统详解
- NYOJ-927 The partial sum problem
- 【python】爬虫1——下载博客文章
- 使用基于Http的消息代替WebService的数据交互
- 驱动开发之 最简单的处理IRP的派遣函数
- Java List重载Collections.sort方法排序
- hdu3336 Count the string KMP
- 编写jQueryUI插件(widget)