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

如何使用'@EmbeddedId”和'@IdClass”在 JPA 和 Hibernate 中有效地映射複合鍵?

Susan Sarandon
Susan Sarandon原創
2024-12-11 11:20:11274瀏覽

How to Effectively Map Composite Keys in JPA and Hibernate using `@EmbeddedId` and `@IdClass`?

使用 JPA 和 Hibernate 映射複合鍵

將實體對應到資料庫表時,通常使用主鍵來唯一識別記錄。由多個欄位組成的複合鍵通常用於遺留資料庫系統。 JPA 和 Hibernate 都提供了註解來有效地處理複合鍵。

使用 EmbeddedId

EmbeddedId 註解表示 Java 類別代表複合主鍵。它將類別映射到表的聚集主鍵。類別必須:

  • 使用@Embeddable 註解
  • 定義與主鍵列對應的公共或受保護屬性
  • 擁有一個為所有屬性取值的公共構造函數主鍵列
  • 對值實作equals() 和hashCode()方法equal

EmbeddedId 範例

@Entity
public class Time {
    @EmbeddedId
    private TimePK timePK;

    private String src;
    private String dst;
    private Integer distance;
    private Integer price;
}

@Embeddable
public class TimePK {
    private Integer levelStation;
    private Integer confPathID;

    // Constructor, equals(), and hashCode() methods omitted for brevity
}

使用IdClass

使用IdClass
  • 使用IdClass
  • 擴展可序列化物件(例如java.io.Serialized)

擁有一個公共無參建構子定義public(或protected ) ,具有基於屬性的存取)與主鍵列對應的欄位或屬性

@Entity
@IdClass(TimePK.class)
public class Time {

    @Id
    private Integer levelStation;
    @Id
    private Integer confPathID;

    private String src;
    private String dst;
    private Integer distance;
    private Integer price;
}

public class TimePK implements Serializable {
    private Integer levelStation;
    private Integer confPathID;

    // Constructor, equals(), and hashCode() methods omitted for brevity
}
實作equals() 和hashCode() 方法用於值相等

IdClass 範例

在EmbeddedId 和IdClass 之間選擇

    在EmbeddedId 和IdClass 之間選擇
  • EmbeddedId為複合鍵建立一個單獨的類,而IdClass 使用實體類本身來保存主鍵欄位。 EmbeddedId 更明確,建議有意義的實體,而 IdClass 更適合不具有獨立意義的欄位組合。
    • 參考文獻
    JPA 1.0 規格: https://jcp.org/en/jsr/detail?id=220
第2.1.4節:https://jspec.dev.java.net/nonav/javadoc/javax/persistence /doc-files/javax/persistence/spec/version-1_0-final.doc.html#section_2.1.4部分9.1.14:https://jspec.dev.java. net/nonav/javadoc/javax/persistence/doc-files/javax/persistence/spec/version-1_0-final.doc.html#section_9.1.14 9.1.15 節: https://jspec.dev.java.net/nonav/javadoc/javax/persistence/doc-files/javax/persistence/spec/version-1_0-final.doc.html#section_9 .1.15

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

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