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()
@retention
(runtime)
public @inte***ce
sequencegenerator
主鍵由程式控制
用法:
@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註解中的含義
生成的表
表中的資料
JPA的主鍵生成策略
所謂的主鍵生成策略就是,自動生成主鍵列值的策略 identity id自增長策略。只能用於支援id自增長的資料庫。id identity就是強制使用id自增長策略,只能用於支援id自增長的資料庫 generatedvalue strategy generationtype.identity colu...
jpa設定自增主鍵 jpa主鍵生成策略
主鍵除了自己設定,還有很多種方法可以讓資料庫自動生成。將註解寫在實體類屬性上就可以獲得相應功能 註解 generatorvalue註解 jpa通用策略生成器 引數generationtype public enum generationtype table,特定表生成 見3 sequence,資料庫...
JPA主鍵生成器和主鍵生成策略
jpa中建立實體時,需要宣告實體的主鍵及其主鍵生成策略。我們有乙個實體類叫做email,其主鍵上宣告如下 id column name email id generatedvalue strategy generationtype.sequence,generator emailseq sequen...