Anda memiliki dua kesalahan.
Kesalahan pertama:Anda memetakan hubungan dua arah antara tajuk dan detail dua kali:sekali di tajuk, dan sekali di detail. Bila Anda memiliki asosiasi dua arah, salah satu sisi (satu sisi header, dalam hal ini) harus dideklarasikan sebagai kebalikan dari sisi lainnya, menggunakan mappedBy
atribut:
@OneToMany(fetch = FetchType.EAGER, orphanRemoval = true, mappedBy = "reminderHeader")
@Cascade(value = { CascadeType.SAVE_UPDATE, CascadeType.DELETE })
@Fetch(FetchMode.SELECT)
private Set<ReminderDetails> reminderDetailslist;
Kesalahan kedua:kaskade DELETE hanya diterapkan saat Anda menggunakan Session.delete()
metode untuk menghapus entitas. Hapus kueri melewati sesi sepenuhnya (artinya entitas yang dihapus oleh kueri tetapi dimuat sebelumnya tetap berada di sesi, dalam status yang sama seolah-olah tidak ada kueri yang dieksekusi).
Jadi, untuk mengalirkan penghapusan, Anda harus menjalankan kueri pemilihan untuk menemukan semua header yang akan dihapus, lalu mengulang header ini dan menghapusnya menggunakan session.delete()
.