Memahami CascadeType.ALL dengan Persatuan JPA @ManyToOne
Dalam JPA, CascadeType.ALL ialah pilihan serba boleh yang digunakan untuk menguruskan operasi lata dalam Perhubungan @ManyToOne. Ia membenarkan pengurus kegigihan menyebarkan secara automatik operasi tertentu yang dilakukan pada entiti induk kepada entiti anak yang berkaitan.
Senario:
Pertimbangkan kelas entiti JPA berikut:
public class User { @OneToMany(fetch = FetchType.EAGER) protected Set<Address> userAddresses; } public class Address { @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) protected User addressOwner; }
Maksud CascadeType.ALL:
Dengan CascadeType.ALL ditetapkan pada perhubungan @ManyToOne dalam Alamat, sebarang operasi pada entiti Pengguna akan disebarkan kepada yang berkaitan Alamat entiti. Ini bermakna:
Kesan pada Data:
Contoh Pemadaman:
Dalam senario yang diberikan, jika anda memadamkan Alamat daripada pangkalan data, tetapan CascadeType.ALL akan mencetuskan pemadaman entiti Pengguna yang berkaitan. Memandangkan Pengguna boleh mempunyai berbilang Alamat, Alamat yang selebihnya akan menjadi anak yatim, yang boleh membawa kepada ketidakkonsistenan data.
Cadangan:
Secara amnya tidak digalakkan menggunakan CascadeType. SEMUA dengan perhubungan @ManyToOne, kerana ia boleh membawa kepada operasi data yang tidak diingini. Walau bagaimanapun, operasi melata boleh berguna apabila digunakan dengan perhubungan @OneToMany, di mana entiti anak harus sentiasa mengikut nasib entiti induknya.
Petua:
Untuk mengelakkan isu anak yatim dalam senario yang diberikan, anda harus menggunakan anotasi @JoinColumn pada kelas Pengguna:
@JoinColumn(name = "user_id")
Atas ialah kandungan terperinci Bilakah anda harus mengelak daripada menggunakan CascadeType.ALL dengan persatuan @ManyToOne JPA?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!