Apa perbedaan antara menggunakan @OneToMany
dan @ElementCollection
anotasi karena keduanya bekerja pada hubungan satu-ke-banyak?
Apa perbedaan antara menggunakan @OneToMany
dan @ElementCollection
anotasi karena keduanya bekerja pada hubungan satu-ke-banyak?
Jawaban:
Saya percaya @ElementCollection
ini terutama untuk memetakan non-entitas (embeddable atau dasar) saat @OneToMany
digunakan untuk memetakan entitas. Jadi yang mana yang akan digunakan tergantung pada apa yang ingin Anda capai.
ElementCollection
adalah anotasi JPA standar, yang sekarang lebih disukai daripada anotasi Hibernate eksklusif CollectionOfElements
.
Ini berarti bahwa koleksi bukanlah kumpulan entitas, tetapi kumpulan tipe sederhana (String, dll.) Atau kumpulan elemen yang dapat diembed (kelas dengan penjelasan @Embeddable
).
Ini juga berarti bahwa elemen sepenuhnya dimiliki oleh entitas yang mengandung: mereka dimodifikasi ketika entitas diubah, dihapus ketika entitas dihapus, dll. Mereka tidak dapat memiliki siklus hidup mereka sendiri.
@ElementCollection
memungkinkan Anda untuk menyederhanakan kode ketika Anda ingin menerapkan hubungan satu-ke-banyak dengan tipe sederhana atau tertanam. Misalnya di JPA 1.0 ketika Anda ingin memiliki hubungan satu-ke-banyak ke daftar String
, Anda harus membuat entitas sederhana POJO ( StringWrapper
) yang hanya berisi kunci utama dan String
pertanyaan:
@OneToMany
private Collection<StringWrapper> strings;
//...
public class StringWrapper {
@Id
private int id;
private String string;
}
Dengan JPA 2.0 Anda cukup menulis:
@ElementCollection
private Collection<String> strings;
Lebih sederhana, bukan? Perhatikan bahwa Anda masih dapat mengontrol nama tabel dan kolom menggunakan@CollectionTable
anotasi.
Dasar atau Tertanam : Entitas @ElementCollection
atau @ManyToMany
@ElementCollection:
@OneToMany / @ManyToMany:
ElementCollection dapat mengesampingkan pemetaan, atau tabel untuk koleksi mereka, sehingga Anda dapat memiliki beberapa entitas referensi kelas Embeddable yang sama, tetapi masing-masing menyimpan objek bergantung mereka di tabel terpisah.