1. Pengenalan
Hubungan JPA boleh menjadi dua arah atau dua arah. Ini bermaksud kita dapat memodelkannya sebagai atribut pada salah satu entiti yang berkaitan atau kedua-duanya.
Menentukan arah hubungan antara entiti tidak memberi kesan pada pemetaan pangkalan data. Ini hanya menentukan arah di mana kita menggunakan hubungan itu dalam model domain kita.
Untuk hubungan dua arah, kita biasanya menentukan:
- pihak yang memiliki
- songsang atau sisi rujukan
The @JoinColumn anotasi membantu kita menentukan ruang kami akan gunakan untuk menyertai persatuan entiti atau koleksi unsur. Sebaliknya, atribut mappedBy digunakan untuk menentukan sisi rujukan (sisi bukan pemilik) hubungan.
Dalam tutorial ringkas ini, kita akan melihat perbezaan antara @JoinColumn dan mappedBy dalam JPA. Kami juga akan membentangkan bagaimana menggunakannya dalam persatuan satu-ke-banyak.
2. Persediaan Awal
Untuk mengikuti tutorial ini, katakan kita mempunyai dua entiti: Pekerja dan E - mel.
Jelas, seorang pekerja boleh mempunyai banyak alamat e-mel. Walau bagaimanapun, alamat e-mel yang diberikan boleh dimiliki oleh pekerja tunggal.
Ini bermaksud mereka berkongsi persatuan satu-ke-banyak:

Juga dalam model RDBMS kami, kami akan mempunyai kunci pekerja asing di entiti E - mel kami merujuk kepada atribut id seorang Pekerja .
3. Anotasi @JoinColumn
Dalam hubungan One-to-Many / Many-to-One, sisi yang dimiliki biasanya ditakrifkan pada sisi hubungan ' banyak' . Biasanya pihak yang memiliki kunci asing.
The @JoinColumn mentakrifkan anotasi bahawa pemetaan fizikal sebenar di sebelah memiliki:
@Entity public class Email { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "employee_id") private Employee employee; // ... }
Ini bermaksud entiti E - mel kami akan mempunyai lajur kunci asing bernama pegawai_id yang merujuk kepada id atribut utama entiti Pekerja kami .
4. mappedBy Atribut
Setelah kami menentukan sisi hubungan, Hibernate sudah mempunyai semua maklumat yang diperlukan untuk memetakan hubungan tersebut dalam pangkalan data kami. Untuk menjadikan persatuan ini menjadi dua arah, yang harus kita lakukan ialah menentukan sisi rujukan. Bahagian terbalik atau rujukan hanya memetakan ke sisi pemilik.
Kita dengan mudah boleh menggunakan mappedBy sifat @OneToMany anotasi untuk berbuat demikian. Oleh itu, mari kita tentukan entiti Pekerja kami :
@Entity public class Employee { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @OneToMany(fetch = FetchType.LAZY, mappedBy = "employee") private List emails; // ... }
Di sini, nilai mappedBy adalah nama atribut pemetaan persatuan di sisi pemilik. Dengan ini, kami kini telah mewujudkan hubungan dua arah antara entiti Pekerja dan E - mel kami .
5. Kesimpulan
Dalam tutorial ini, kami melihat perbezaan antara @JoinColumn dan mappedBy dan bagaimana menggunakannya dalam hubungan dua arah satu-ke-banyak.
The @JoinColumn anotasi mentakrifkan pemetaan fizikal sebenar di sebelah yang dimiliki. Sebaliknya, sisi rujukan ditakrifkan menggunakan atribut mappedBy dari anotasi @OneToMany .
Seperti biasa, kod sumber tersedia di Github.