JPA主鍵生成器和主鍵生成策略

2021-07-27 20:52:49 字數 2224 閱讀 4728

jpa中建立實體時,需要宣告實體的主鍵及其主鍵生成策略。我們有乙個實體類叫做email,其主鍵上宣告如下:

@id

@column(name = "email_id")

@generatedvalue(strategy = generationtype.sequence, generator = "emailseq")

@sequencegenerator(initialvalue = 1, name = "emailseq", sequencename = "email_sequence")

private long id;

我們使用@generatedvalue的strategry欄位宣告主鍵生成策略,generator宣告主鍵生成器的名稱,對應於同名的主鍵生成器@sequencegenerator或者@tablegenerator。

與hibernate不同,jpa只提供四種主鍵生成器策略,分別介紹如下:

多數資料庫支援identity列,資料庫會在新行插入時自動給id賦值,這也叫做id自增長列,比如mysql中可以在建立表時宣告「auto_increment」, 就是乙個id子增長列:

createtable email

jpa中identity型別的主鍵生成策略用法如下:

@generatedvalue(strategy=generationtype.identity)

@column(name="id")

private long id;

由於主鍵由資料庫自動插入,因此不需要額外的配置資訊。

多數資料庫支援identity策略:mysql, sql server, db2, derby, sybase, postgresql。

oracle不支援id子增長列而是使用序列的機制生成主鍵id,對此,可以選用序列作為主鍵生成策略:

@generatedvalue(strategy = generationtype.sequence, generator = "emailseq")

@sequencegenerator(initialvalue = 1, name = "emailseq", sequencename = "email_sequence")

private long id;;

上述宣告等同於在資料庫上建立乙個序列:

create sequence email_sequence;

如果不指定序列生成器的名稱,則使用廠商提供的預設序列生成器,比如hibernate預設提供的序列名稱為hibernate_sequence。

支援的資料庫: oracle、postgresql、db2

有時候為了不依賴於資料庫的具體實現,在不同資料庫之間更好的移植,可以在資料庫中新建序列表來生成主鍵,序列表一般包含兩個字段:第乙個字段引用不 同的關係表,第二個欄位是該關係表的最大序號。這樣,只需要一張序列就可以用於多張表的主鍵生成。 用法:

@tablegenerator( name = "emailseq", table = "my_project_sequence_table", pkcolumnname = "sequence_name", valuecolumnname = "sequence_count", initialvalue = 1, allocationsize = 1)

@generatedvalue( strategy = generationtype.table, generator = "emailseq")

如果不指定表生成器,jpa廠商會使用預設的表,比如hibernate在oracle資料庫上會預設使用表hibernate_sequence。

這種方式雖然通用性最好,所有的關係型資料庫都支援,但是由於不能充分利用具體資料庫的特性,建議不要優先使用。

把主鍵生成策略交給jpa廠商(persistence provider),由它根據具體的資料庫選擇合適的策略,可以是table/sequence/identity中的一種。假如資料庫是oracle,則選擇sequence。

@generatedvalue(strategy = generationtype.auto)

如果不特別指定,這是預設的主鍵生成策略。

JPA 主鍵生成策略

hibernate主鍵標識為 id,其生成規則由 generatedvalue設定的 generatedvalue註解的strategy屬性指定具體的策略基本使用的有四種策略規則 表示自增策略,主鍵由資料庫生成 主要是自動增長型 比如 mysql可以在建立表時宣告 auto increment 來指...

hibernate的主鍵生成器策略

我們都知道hibernate提供相應的api能自動生成資料庫表,說到表,一定會設計到的乙個概念就是主鍵,主鍵是由程式自動生成的,不應該由使用者自己輸入,那麼hibernate在往表中填充資料庫時,主鍵是怎麼生成的那,hibernat提供了主鍵生成策略 第一種 assigned主鍵策略程式設計師自己手...

JPA的主鍵生成策略

所謂的主鍵生成策略就是,自動生成主鍵列值的策略 identity id自增長策略。只能用於支援id自增長的資料庫。id identity就是強制使用id自增長策略,只能用於支援id自增長的資料庫 generatedvalue strategy generationtype.identity colu...