Perbedaan Antara @JoinColumn dan mappedBy

1. Perkenalan

Hubungan JPA dapat berupa searah atau dua arah. Ini berarti kita dapat memodelkannya sebagai atribut tepat pada salah satu entitas terkait atau keduanya.

Mendefinisikan arah hubungan antar entitas tidak berdampak pada pemetaan database. Ini hanya menentukan arah di mana kami menggunakan hubungan itu dalam model domain kami.

Untuk hubungan dua arah, kami biasanya mendefinisikan:

  • sisi yang memiliki
  • terbalik atau sisi referensi

The @JoinColumn penjelasan membantu kita menentukan kolom kita akan menggunakan untuk bergabung dengan asosiasi entitas atau koleksi elemen. Di sisi lain, atribut mappedBy digunakan untuk menentukan sisi referensi (sisi non-pemilik) dari hubungan.

Dalam tutorial singkat ini, kita akan melihat perbedaan antara @JoinColumn dan mappedBy di JPA. Kami juga akan menyajikan cara menggunakannya dalam asosiasi satu-ke-banyak.

2. Pengaturan Awal

Untuk mengikuti tutorial ini, katakanlah kita memiliki dua entitas: Karyawan dan Email.

Jelas, seorang karyawan dapat memiliki beberapa alamat email. Namun, alamat email tertentu bisa jadi milik satu karyawan.

Itu berarti mereka berbagi asosiasi satu-ke-banyak:

Juga dalam model RDBMS kami, kami akan memiliki kunci asing employee_id di entitas Email kami yang mengacu pada atribut id dari Karyawan .

3. Anotasi @JoinColumn

Dalam hubungan Satu-ke-Banyak / Banyak-ke-Satu, sisi memiliki biasanya ditentukan pada sisi ' banyak' dari hubungan tersebut. Biasanya sisi yang memiliki kunci asing.

The @JoinColumn penjelasan mendefinisikan bahwa pemetaan fisik yang sebenarnya di sisi 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 berarti bahwa entitas Email kita akan memiliki kolom kunci asing bernama employee_id yang mengacu pada id atribut utama dari entitas Karyawan kita .

4. mappedBy Attribute

Setelah kita menentukan sisi kepemilikan dari hubungan tersebut, Hibernate sudah memiliki semua informasi yang dibutuhkan untuk memetakan hubungan tersebut dalam database kita. Untuk membuat asosiasi ini menjadi dua arah, yang harus kita lakukan adalah menentukan sisi referensi. Sisi terbalik atau referensi hanya memetakan ke sisi pemilik.

Kita dapat dengan mudah menggunakan atribut mappedBy dari anotasi @OneToMany untuk melakukannya. Jadi, mari kita tentukan entitas Karyawan kita :

@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-asosiasi di sisi yang memiliki. Dengan ini, kami sekarang telah membuat asosiasi dua arah antara entitas Karyawan dan Email kami .

5. Kesimpulan

Dalam tutorial ini, kita melihat perbedaan antara @JoinColumn dan mappedBy dan bagaimana menggunakannya dalam hubungan dua arah satu-ke-banyak.

The @JoinColumn penjelasan mendefinisikan pemetaan fisik yang sebenarnya di sisi memiliki. Di sisi lain, sisi referensi ditentukan menggunakan atribut mappedBy dari anotasi @OneToMany .

Seperti biasa, kode sumber tersedia di Github.