Memahami mappedBy dalam JPA dan Hibernate
Dalam Java Persistence API (JPA) dan Hibernate, mappedBy ialah anotasi penting yang memudahkan pengurusan hubungan dua hala antara entiti. Ia mempunyai dua tujuan utama:
1. Menunjukkan Sisi Songsang Perhubungan:
mappedBy mengenal pasti entiti yang tidak memiliki perhubungan itu. Ia menentukan harta dalam entiti itu harus digunakan untuk mengakses atribut berkaitan. Ini amat berguna dalam perhubungan dwiarah di mana kedua-dua entiti merujuk antara satu sama lain.
2. Menghapuskan Kekangan Kunci Asing:
Tidak seperti pendekatan tradisional untuk mencipta perhubungan utama asing, mappedBy membolehkan anda mentakrifkan perhubungan tanpa menambah lajur kunci asing secara fizikal. Sebaliknya, ia memanfaatkan kewujudan kunci asing sedia ada pada entiti lain.
Menggunakan mappedBy dalam Perhubungan Dwiarah:
Untuk menggambarkan penggunaan mappedBy, pertimbangkan contoh yang diberikan:
Airline.java:
<code class="java">@Entity @Table(name="Airline") public class Airline { // ... Other fields ... @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "IDAIRLINE") private Set<AirlineFlight> airlineFlights; }</code>
AirlineFlight.java:
<code class="java">@Entity @Table(name="AirlineFlight") public class AirlineFlight { // ... Other fields ... @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "IDAIRLINE") private Airline airline; }</code>
Dalam ini contoh, Syarikat Penerbangan ialah entiti pemilik, kerana ia memiliki koleksi airlineFlights. Hubungan daripada Syarikat Penerbangan ke AirlineFlight adalah melalui hartanah airlineFlights.
Di pihak AirlineFlight, hartanah syarikat penerbangan dianotasi dengan @ManyToOne dan mappedBy = "airlineFlights". Ini menyatakan bahawa AirlineFlight ialah pihak bukan pemilik dalam perhubungan dan harta syarikat penerbangan dipetakan oleh hartanah airlineFlights dalam Syarikat Penerbangan.
Dalam skema pangkalan data yang disediakan, AirlineFlights mempunyai lajur IDAIRLINE sebagai kunci asing kepada Syarikat Penerbangan . Oleh itu, Airline sememangnya pemilik entiti airlineFlights.
Dengan menggunakan mappedBy, anda mewujudkan hubungan dwi-arah tanpa menambah lajur kunci asing tambahan pada AirlineFlight. Sebaliknya, JPA dan Hibernate akan memautkan entiti secara automatik berdasarkan pemetaan harta yang ditentukan.
Atas ialah kandungan terperinci Apakah peranan `mappedBy` dalam JPA dan Hibernate untuk mengurus perhubungan dua hala?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!