Rumah >Java >javaTutorial >Bagaimana untuk Memetakan Kunci Komposit dengan Berkesan dalam JPA dan Hibernate menggunakan `@EmbeddedId` dan `@IdClass`?

Bagaimana untuk Memetakan Kunci Komposit dengan Berkesan dalam JPA dan Hibernate menggunakan `@EmbeddedId` dan `@IdClass`?

Susan Sarandon
Susan Sarandonasal
2024-12-11 11:20:11274semak imbas

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

Memetakan Kekunci Komposit dengan JPA dan Hibernate

Apabila memetakan entiti ke jadual pangkalan data, adalah perkara biasa untuk menggunakan kunci utama untuk mengenal pasti rekod secara unik. Kekunci komposit, yang terdiri daripada berbilang lajur, sering digunakan dalam sistem pangkalan data lama. Kedua-dua JPA dan Hibernate menyediakan anotasi untuk mengendalikan kunci komposit dengan berkesan.

Menggunakan EmbeddedId

Anotasi EmbeddedId menandakan bahawa kelas Java mewakili kunci utama komposit. Ia memetakan kelas kepada kunci primer berkelompok jadual. Kelas mesti:

  • Beranotasi dengan @Embeddable
  • Tentukan sifat awam atau dilindungi yang sepadan dengan lajur kunci utama
  • Mempunyai pembina awam yang mengambil nilai untuk semua lajur kunci utama
  • Laksanakan kaedah equals() dan hashCode() untuk nilai kesaksamaan

Contoh dengan 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
}

Menggunakan IdClass

Anotasi IdClass atau menyatakan bahawa berbilang medan sifat kelas entiti membentuk kunci utama komposit. Kelas mesti:

  • Melanjutkan objek boleh bersiri (cth., java.io.Serializable)
  • Mempunyai pembina tanpa hujah awam
  • Tentukan awam (atau dilindungi , dengan medan akses berasaskan harta) atau sifat yang sepadan dengan lajur kunci utama
  • Laksanakan kaedah equals() dan hashCode() untuk kesamaan nilai

Contoh dengan IdClass

@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
}

Memilih Antara EmbeddedId dan IdClass

EmbeddedId mencipta yang berasingan kelas untuk kunci komposit, manakala IdClass menggunakan kelas entiti itu sendiri untuk memegang medan kunci utama. EmbeddedId lebih eksplisit dan mencadangkan entiti yang bermakna, manakala IdClass lebih baik untuk gabungan medan yang tidak membawa maksud bebas.

Rujukan

  • Spesifikasi JPA 1.0: https://jcp.org/en/jsr/detail?id=220

    • Bahagian 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
    • Bahagian 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
    • Bahagian 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

Atas ialah kandungan terperinci Bagaimana untuk Memetakan Kunci Komposit dengan Berkesan dalam JPA dan Hibernate menggunakan `@EmbeddedId` dan `@IdClass`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn