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

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

DDD
Lepaskan: 2024-12-21 19:11:11
asal
654 orang telah melayarinya

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;
    ...
}
Salin selepas log masuk
@Entity
public class Company {

    @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY, 
    mappedBy = "companyIdRef")
    private List<Branch> branches;
    ...
}
Salin selepas log masuk

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;
}
Salin selepas log masuk

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan