理解JPA註解 GeneratedValue

2021-09-20 04:37:20 字數 2523 閱讀 3602

通過annotation來對映hibernate實體的,基於annotation的hibernate主鍵標識為@id,

其生成規則由@generatedvalue設定的.這裡的@id和@generatedvalue都是jpa的標準用法,

jpa提供四種標準用法,由@generatedvalue的源**可以明顯看出.

target()    

@retention(runtime)

public @inte***ce generatedvalue

其中generationtype:

public enum generationtype
jpa提供的四種標準用法為table,sequence,identity,auto.

1.sequence

實體類中的註解

@id  

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

@sequencegenerator(name="aaa", sequencename="seq_payment")

@sequencegenerator定義

@target()   

@retention(runtime)

public @inte***ce sequencegenerator

2.identity

主鍵則由資料庫自動維護,使用起來很簡單

@id  

@generatedvalue(strategy = generationtype.identity)

3、auto

預設的配置。如果不指定主鍵生成策略,預設為auto。

@id  

@generatedvalue(strategy = generationtype.auto)

hibernate提供多種主鍵生成策略,有點是類似於jpa,有的是hibernate特有,下面列出幾個hibernate比較常用的生成策略:

hibernate提供了多種生成器供選擇,基於annotation的方式通過@genericgenerator實現.

hibernate每種主鍵生成策略提供介面org.hibernate.id.identifiergenerator的實現類,如果要實現自定義的主鍵生成策略也必須實現此介面.

public inte***ce identifiergenerator
identifiergenerator提供一generate方法,generate方法返回產生的主鍵.

自定義主鍵生成策略,由@genericgenerator實現。

hibernate在jpa的基礎上進行了擴充套件,可以用一下方式引入hibernate獨有的主鍵生成策略,就是通過@genericgenerator加入的。

比如說,jpa標準用法

@id  

@generatedvalue(generationtype.auto)

就可以用hibernate特有以下用法來代替:

@id

@generatedvalue(generator = "paymentablegenerator")

@genericgenerator(name = "paymentablegenerator", strategy = "assigned")

@genericgenerator的定義:

@target()  

@retention(runtime)

源**如下:

public @inte***ce genericgenerator ;  

}

對於這些hibernate主鍵生成策略和各自的具體生成器之間的關係,在org.hibernate.id.identifiergenerato***ctory中指定了,

static
上面十二種策略,加上native,hibernate一共預設支援十三種生成策略。使用hibernate註解示例如下:

@id

@generatedvalue(generator = "idgenerator")

@genericgenerator(name = "idgenerator", strategy = "identity")

這種完全類似於:

@id

@generatedvalue(strategy=generationtype.identity)

理解JPA註解 GeneratedValue

通過annotation來對映hibernate實體的,基於annotation的hibernate主鍵標識為 id,其生成規則由 generatedvalue設定的.這裡的 id和 generatedvalue都是jpa的標準用法,jpa提供四種標準用法,由 generatedvalue的源 可以...

JPA註解補充

fetchtype.lazy和 fetchtype.eager 什麼區別?1 fetchtype.lazy 懶載入,載入乙個實體時,定義懶載入的屬性不會馬上從資料庫中載入。2 fetchtype.eager 急載入,載入乙個實體時,定義急載入的屬性會立即從資料庫中載入。3 比方 user 類有兩個屬...

JPA註解查詢

1 entity name entityname 必須,name為可選,對應資料庫中一的個表 entity 標識這個pojo是乙個jpa實體 public class users implements serializable 2 table name catalog schema 可選,通常和 e...