Rumah >Java >javaTutorial >JoinColumn vs. mappedBy dalam JPA: Bila Menggunakan Anotasi Yang Mana?

JoinColumn vs. mappedBy dalam JPA: Bila Menggunakan Anotasi Yang Mana?

DDD
DDDasal
2024-12-21 19:11:11688semak imbas

JoinColumn vs. mappedBy in JPA: When to Use Which Annotation?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn