首頁 > Java > java教程 > 如何使用 @EmbeddedId 與 @IdClass 在 JPA 和 Hibernate 中映射複合鍵?

如何使用 @EmbeddedId 與 @IdClass 在 JPA 和 Hibernate 中映射複合鍵?

Linda Hamilton
發布: 2024-12-05 03:24:17
原創
522 人瀏覽過

How to Map Composite Keys in JPA and Hibernate using @EmbeddedId vs. @IdClass?

使用 JPA 和 Hibernate 映射複合鍵

在提供的程式碼中,為 Time 表定義了一個複合鍵,其中 levelStation 和 confPathID 作為其組件。要在 JPA 和 Hibernate 中對應此組合鍵,您有兩個選擇:@EmbeddedId 和 @IdClass。

使用 @IdClass

@IdClass 註解可讓您將實體的多個欄位對應到形成複合主鍵。這需要定義一個表示主鍵的類別。在這種情況下,TimePK 類別可以定義如下:

@IdClass(TimePK.class)
public class Time implements Serializable {
    // ...
}
登入後複製

這裡,TimePK 是一個單獨的類,必須定義無參數建構子、主鍵欄位的getters/setters 和equals( ) 和hashCode( ) 方法。

使用 @EmbeddedId

@EmbeddedId 註解映射嵌入類別到實體的主鍵。與@IdClass相反,這種方法結合了實體類別和主鍵類別。以下是使用@EmbeddedId 的方法:

@Entity
class Time implements Serializable {
    @EmbeddedId
    private TimePK timePK;
    // ...
}
登入後複製

在這種情況下,TimePK 是Time 實體的內部類,還必須定義一個無參數構造函數、關鍵字段的getters/setters 和equals ( ) 和hashCode() 方法。

@IdClass 和 @EmbeddedId 的區別

@IdClass 和 @EmbeddedId 之間的主要區別在於它們對查詢語法的影響。使用 @IdClass,您可以直接透過實體存取主鍵字段,而使用 @EmbeddedId,您可以透過嵌入類別上的 getter 存取它。

在兩者之間進行選擇時,@EmbeddedId 傳達了這樣的事實主鍵在域模型中具有有意義的標識,而@IdClass 表明主鍵只是唯一標識該域的字段的組合

參考文獻

  • JPA 1.0規格:

    • 第2.1.4 節「主鍵與實體識別」
    • 第9.1.14 節「嵌入式ID註解」
    • 第9.1.15 節「嵌入式ID註解」
    第9.1.15 節「IdClass 註解」

以上是如何使用 @EmbeddedId 與 @IdClass 在 JPA 和 Hibernate 中映射複合鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板