Memahami Perbezaan antara JoinColumn dan mappedBy dalam JPA
Dalam Java Persistence API (JPA), mengurus perhubungan antara entiti adalah penting. Antara anotasi utama untuk mewujudkan perhubungan ialah @JoinColumn dan @mappedBy.
Apabila menggunakan anotasi @OneToMany untuk perhubungan dua hala, seseorang perlu membezakan antara pemilikan dan sisi songsang perhubungan itu. Menggunakan @JoinColumn pada bahagian pemilikan menunjukkan bahawa jadual yang dirujuk mempunyai lajur kunci asing ke jadual yang sepadan. Sebaliknya, @mappedBy menandakan bahagian songsang, membayangkan bahawa entiti lain bertindak sebagai pemilik perhubungan dan mempunyai lajur dipetakan yang merujuk entiti menggunakan @mappedBy.
Contoh Kod
Pertimbangkan kod berikut contoh:
@Entity public class Company { @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY) @JoinColumn(name = "companyIdRef", referencedColumnName = "companyId") private List<Branch> branches; ... }
@Entity public class Company { @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY, mappedBy = "companyIdRef") private List<Branch> branches; ... }
Dalam contoh pertama, Syarikat ialah pihak pemilik dan cawangan dirujuk melalui lajur kunci asing companyIdRef. Dalam contoh kedua, Syarikat ialah bahagian songsang perhubungan dan cawangan dirujuk melalui lajur companyIdRef yang dipetakan.
Penggunaan Anotasi yang Betul
Untuk kod yang disediakan dalam soalan, anotasi yang betul hendaklah:
@Entity public class Company { @OneToMany(mappedBy = "company", orphanRemoval = true, fetch = FetchType.LAZY, cascade = CascadeType.ALL) private List<Branch> branches; } @Entity public class Branch { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "companyId") private Company company; }
Dengan menggunakan anotasi ini, hubungan dua hala ditubuhkan antara Syarikat dan Cawangan, dengan Syarikat sebagai bahagian songsang dan Cawangan sebagai pihak pemilik.
Atas ialah kandungan terperinci JoinColumn vs. mappedBy dalam JPA: Bila Menggunakan Anotasi Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!