首頁 >Java >java教程 >如何使用「EmbeddedId」和「IdClass」在 Hibernate 中對應 JPA 中的複合鍵?

如何使用「EmbeddedId」和「IdClass」在 Hibernate 中對應 JPA 中的複合鍵?

Patricia Arquette
Patricia Arquette原創
2024-12-03 09:32:14439瀏覽

How to Map Composite Keys in JPA with Hibernate Using `EmbeddedId` and `IdClass`?

使用Hibernate 的JPA 中的複合鍵

使用關聯式資料庫時,可能需要將組合鍵對應到物件的Java 類別-面向程式設計.在給定的程式碼中,時間表有一個由 levelStation 和 confPathID 組成的複合鍵。本文將指導您如何使用 JPA 和 Hibernate 以及 EmbeddedId 和 IdClass 註解來對應此複合鍵。

IdClass

IdClass 註解用於對應多個將各個欄位合併為單一複合主鍵 (PK)。要實作此方法,請建立定義複合 PK 結構的靜態內部類,並實現其 equals() 和 hashCode() 方法以進行正確的值比較。將此靜態類別中的對應欄位與實體中的欄位進行標識。

public class TimePK implements Serializable {
    protected Integer levelStation;
    protected Integer confPathID;
    // ...
}

@Entity
@IdClass(TimePK.class)
public class Time {
    @Id private Integer levelStation;
    @Id private Integer confPathID;
    // ...
}

EmbeddedId

使用EmbeddedId註解,可以將複合PK封裝為可嵌入的實體內的類別。在可嵌入類別中,定義構成複合 PK 的欄位及其存取器。

@Embeddable
public class TimePK {
    protected Integer levelStation;
    protected Integer confPathID;
    // ...
}

@Entity
public class Time {
    @EmbeddedId private TimePK timePK;
    // ...
}

差異

IdClass 和EmbeddedId 註解都可以用於映射組合鍵,但它們的服務略有不同目的:

  • EmbeddedId 強調複合PK 作為其內部的實體具有語義意義或可能可重複使用。
  • IdClass 另一方面,著重於指定特定組合欄位唯一標識一個實體,而不暗示任何特定意義。

查詢組合鍵

根據使用的註解,基於組合查詢時需要的語法略有不同鍵:

IdClass

select t.levelStation from Time t

EmbeddedI d

select t.timePK.levelStation from Time t

參考文獻

  • [JPA 1.0規格](https://docs.oracle.com/javaee/7/api/javax/persistence/package-summary.html)

    • 第2.1.4 節「主鍵與實體識別」
    • 第9.1.14 節「EmbeddedId註解」
    • 第9.1.15 節「IdClass 註解」

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn