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>
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>
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>
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>
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>
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>
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 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.
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!