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