JPA 主鍵生成策略

2021-10-12 22:11:34 字數 2693 閱讀 2154

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...