JPA @GeneratedValue 四種標準用法TABLE,SEQUENCE,IDENTITY,AUTO詳解
一、JPA通用策略生成器
JPA提供四種標準用法,由@GeneratedValue的源代碼:
@Target({METHOD,FIELD})
@Retention(RUNTIME)
public @interface GeneratedValue{
GenerationType strategy() default AUTO;
String generator() default "";
}其中GenerationType:
public enum GenerationType{
TABLE,
SEQUENCE,
IDENTITY,
AUTO
}JPA提供的四種標準用法為TABLE,SEQUENCE,IDENTITY,AUTO.
TABLE:使用一個特定的數(shù)據(jù)庫表格來保存主鍵。
SEQUENCE:根據(jù)底層數(shù)據(jù)庫的序列來生成主鍵,條件是數(shù)據(jù)庫支持序列。
IDENTITY:主鍵由數(shù)據(jù)庫自動生成(主要是自動增長型)
AUTO:主鍵由程序控制。
一:TABLE
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator="payablemoney_gen")
@TableGenerator(name = "pk_gen",
table="tb_generator",
pkColumnName="gen_name",
valueColumnName="gen_value",
pkColumnValue="PAYABLEMOENY_PK",
allocationSize=1
)這里應用表tb_generator,定義為
CREATE TABLE tb_generator ( id NUMBER NOT NULL, gen_name VARCHAR2(255) NOT NULL, gen_value NUMBER NOT NULL, PRIMARY KEY(id) )
插入紀錄,供生成主鍵使用
INSERT INTO tb_generator(id, gen_name, gen_value) VALUES (1,PAYABLEMOENY_PK', 1);
在主鍵生成后,這條紀錄的value值,按allocationSize遞增。
@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屬性表示表生成策略所持久化的表名,例如,這里表使用的是數(shù)據(jù)庫中的“tb_generator”。
catalog屬性和schema具體指定表所在的目錄名或是數(shù)據(jù)庫名。
pkColumnName屬性的值表示在持久化表中,該主鍵生成策略所對應鍵值的名稱。例如在“tb_generator”中將“gen_name”作為主鍵的鍵值
valueColumnName屬性的值表示在持久化表中,該主鍵當前所生成的值,它的值將會隨著每次創(chuàng)建累加。例如,在“tb_generator”中將“gen_value”作為主鍵的值
pkColumnValue屬性的值表示在持久化表中,該生成策略所對應的主鍵。例如在“tb_generator”表中,將“gen_name”的值為“CUSTOMER_PK”。
initialValue表示主鍵初識值,默認為0。
allocationSize表示每次主鍵值增加的大小,例如設置成1,則表示每次創(chuàng)建新記錄后自動加1,默認為50。
UniqueConstraint與@Table標記中的用法類似。
二:SEQUENCE
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="payablemoney_seq") @SequenceGenerator(name="payablemoney_seq", sequenceName="seq_payment")
@SequenceGenerator定義
@Target({TYPE, METHOD, FIELD})
@Retention(RUNTIME)
public @interface SequenceGenerator {
String name();
String sequenceName() default "";
int initialValue() default 0;
int allocationSize() default 50;
}name屬性表示該表主鍵生成策略的名稱,它被引用在@GeneratedValue中設置的“generator”值中。
sequenceName屬性表示生成策略用到的數(shù)據(jù)庫序列名稱。
initialValue表示主鍵初識值,默認為0。
allocationSize表示每次主鍵值增加的大小,例如設置成1,則表示每次創(chuàng)建新記錄后自動加1,默認為50。
三:IDENTITY
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
四:AUTO
@Id @GeneratedValue(strategy = GenerationType.AUTO)
在指定主鍵時,如果不指定主鍵生成策略,默認為AUTO。
@Id
跟下面的定義是一樣的
@Id @GeneratedValue(strategy = GenerationType.AUTO)
以上就是JPA @GeneratedValue 四種標準用法TABLE,SEQUENCE,IDENTITY,AUTO詳解的詳細內(nèi)容,更多關于JPA @GeneratedValue 四種標準用法的資料請關注腳本之家其它相關文章!
相關文章
Spring+Http請求+HttpClient實現(xiàn)傳參
這篇文章主要介紹了Spring+Http請求+HttpClient實現(xiàn)傳參,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-03-03
Java編程中快速排序算法的實現(xiàn)及相關算法優(yōu)化
這篇文章主要介紹了Java編程中快速排序算法的實現(xiàn)及相關算法優(yōu)化,快速排序算法的最差時間復雜度為(n^2),最優(yōu)時間復雜度為(n\log n),存在優(yōu)化的空間,需要的朋友可以參考下2016-05-05
Spring中的@Qualifier注解和@Resource注解區(qū)別解析
這篇文章主要介紹了Spring中的@Qualifier注解和@Resource注解區(qū)別解析,@Qualifier注解的用處是當一個接口有多個實現(xiàn)的時候,為了指名具體調(diào)用哪個類的實現(xiàn),@Resource注解可以通過 byName命名和byType類型的方式注入,需要的朋友可以參考下2023-11-11
JAVA Iterator接口與增強for循環(huán)的實現(xiàn)
這篇文章主要介紹了JAVA Iterator接口與增強for循環(huán)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11

