Rumah  >  Artikel  >  Java  >  Bagaimanakah anda mentakrifkan perhubungan antara entiti dalam Hibernate 4 dan Spring menggunakan anotasi?

Bagaimanakah anda mentakrifkan perhubungan antara entiti dalam Hibernate 4 dan Spring menggunakan anotasi?

Susan Sarandon
Susan Sarandonasal
2024-11-03 13:30:30418semak imbas

How do you define relationships between entities in Hibernate 4 and Spring using annotations?

Menggunakan Anotasi untuk Mentakrifkan Perhubungan dalam Hibernate 4 dan Spring

Perhubungan Satu-dengan-Satu Sehala

Untuk mencipta satu arah satu perhubungan -ke-satu, gunakan anotasi @OneToOne pada kelas pemilikan. Konfigurasikan anotasi @JoinColumn untuk menentukan nama lajur yang akan memegang kunci asing dalam jadual kelas bergantung.

Contoh:

<code class="java">public class Foo {
    private Long fooId;

    @OneToOne
    private Bar bar;
}

public class Bar {
    private Long barId;
    // No corresponding mapping to Foo.class
}</code>

Dua Arah Satu-ke- Satu Perhubungan

Untuk perhubungan satu-dengan-satu dua hala, berikan anotasi kedua-dua kelas dengan @OneToOne. Gunakan anotasi @JoinColumn pada kelas pemilikan untuk menentukan nama lajur kunci asing. Pada kelas yang bergantung, gunakan anotasi @JoinColumn untuk memetakan kunci asing kembali ke kelas yang memiliki.

Contoh:

<code class="java">public class Foo {
    private Long fooId;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "barId")
    private Bar bar;
}

public class Bar {
    private Long barId;

    @OneToOne(mappedBy = "bar")
    private Foo foo;
}</code>

Perhubungan Satu-dengan-Banyak Satu Arah dengan Pengguna- Jadual Sertai Terurus

Untuk perhubungan satu-ke-banyak satu arah menggunakan jadual gabungan terurus pengguna, cipta kelas jadual gabungan yang memetakan perhubungan antara kedua-dua kelas. Anotasi jadual gabungan dengan @Entity dan @Table dan petakan lajur kepada kunci utama kelas induk dan anak.

Contoh:

<code class="java">public class Foo {
    private Long fooId;

    @OneToMany
    @JoinTable(name="FOO_BAR",
        joinColumns = @JoinColumn(name="fooId"),
        inverseJoinColumns = @JoinColumn(name="barId"))
    private List<Bar> bars;
}

public class Bar {
    private Long barId;

    // No mapping specified here.
}

@Entity
@Table(name="FOO_BAR")
public class FooBar {
    private UUID fooBarId;

    @ManyToOne
    @JoinColumn(name = "fooId")
    private Foo foo;

    @ManyToOne
    @JoinColumn(name = "barId")
    private Bar bar;

    // You can store other objects/fields on this table here.
}</code>

Dua Arah Satu-ke-Banyak Hubungan Menggunakan Pemetaan Kunci Asing

Untuk perhubungan satu-ke-banyak dwiarah menggunakan pemetaan kunci asing, anotasi kelas pemilikan dengan @OneToMany dan kelas bergantung dengan @ManyToOne. Gunakan anotasi @JoinColumn untuk menentukan nama lajur yang akan memegang kunci asing dalam jadual kelas bergantung.

Contoh:

<code class="java">public class Foo {
    private Long fooId;

    @OneToMany(mappedBy = "bar")
    private List<Bar> bars;
}

public class Bar {
    private Long barId;

    @ManyToOne
    @JoinColumn(name = "fooId")
    private Foo foo;
}</code>

Perhubungan Banyak-ke-Banyak Dwi Arah Menggunakan Hibernate -Jadual Sertai Terurus

Untuk perhubungan banyak-ke-banyak dwiarah menggunakan jadual gabungan terurus Hibernate, anotasi setiap kelas dengan @OneToMany. Buat kelas jadual gabungan yang memetakan hubungan antara kedua-dua kelas. Anotasi jadual gabungan dengan @Entity dan @Table dan petakan lajur kepada kunci utama kelas induk dan anak.

Contoh:

<code class="java">public class Foo {
    private Long fooId;

    @OneToMany
    @JoinTable(name="FOO_BAR",
        joinColumns = @JoinColumn(name="fooId"),
        inverseJoinColumns = @JoinColumn(name="barId"))
    private List<Bar> bars;
}

public class Bar {
    private Long barId;

    @OneToMany
    @JoinTable(name="FOO_BAR",
        joinColumns = @JoinColumn(name="barId"),
        inverseJoinColumns = @JoinColumn(name="fooId"))
    private List<Foo> foos;
}</code>

Dua Arah Banyak-ke-Banyak Perhubungan Menggunakan Objek Gabungan Diurus Pengguna

Untuk perhubungan banyak-ke-banyak dwi-arah menggunakan objek jadual gabungan diurus pengguna, cipta kelas jadual gabungan yang memetakan perhubungan antara kedua-dua kelas. Anotasi jadual gabungan dengan @Entity dan @Table dan petakan lajur kepada kunci utama kelas induk dan anak. Anotasi setiap kelas dengan @OneToMany dan petakan medan ke kelas jadual sertai.

Contoh:

<code class="java">public class Foo {
    private Long fooId;

    @OneToMany(mappedBy = "bar")
    private List<FooBar> bars;
}

public class Bar {
    private Long barId;

    @OneToMany(mappedBy = "foo")
    private List<FooBar> foos;
}

@Entity
@Table(name="FOO_BAR")
public class FooBar {
    private UUID fooBarId;

    @ManyToOne
    @JoinColumn(name = "fooId")
    private Foo foo;

    @ManyToOne
    @JoinColumn(name = "barId")
    private Bar bar;

    // You can store other objects/fields on this table here.
}</code>

Menentukan Arah Lata

Hibernate boleh menjalankan operasi sama ada atau kedua-dua cara dalam hubungan dua hala. Lata berubah ke arah yang diingini dengan menandakan anotasi @OneToMany pada kelas pemilikan. Secara amnya, adalah dinasihatkan untuk menandakan lata pada bahagian pemilikan perhubungan.

Penyingkiran Yatim

Penyingkiran anak yatim memastikan objek yatim yang tidak lagi dikaitkan dengan objek induk dipadamkan secara automatik daripada pangkalan data. Dayakan pengalihan keluar anak yatim dengan menetapkan orphanRemoval = benar pada anotasi @OneToMany.

Menangani LazyInitializationException

LazyInitializationException berlaku apabila entiti yang mengandungi koleksi yang diambil secara malas diakses sebelum koleksi dimulakan. Untuk menyelesaikannya, mulakan koleksi secara eksplisit menggunakan Hibernate.initialize() atau gunakan fetchType = FetchMode.EAGER pada anotasi @OneToMany untuk memuatkan koleksi dengan bersemangat.

Atas ialah kandungan terperinci Bagaimanakah anda mentakrifkan perhubungan antara entiti dalam Hibernate 4 dan Spring menggunakan anotasi?. 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