Имате две грешки.
Първа грешка:съпоставихте двупосочната връзка между заглавката и детайлите два пъти:веднъж в заглавката и веднъж в подробностите. Когато имате двупосочна асоциация, една от страните (в този случай едната заглавна страна) трябва да бъде декларирана като обратна на другата страна, като се използва mappedBy
атрибут:
@OneToMany(fetch = FetchType.EAGER, orphanRemoval = true, mappedBy = "reminderHeader")
@Cascade(value = { CascadeType.SAVE_UPDATE, CascadeType.DELETE })
@Fetch(FetchMode.SELECT)
private Set<ReminderDetails> reminderDetailslist;
Втора грешка:каскадата DELETE се прилага само когато използвате Session.delete()
метод за изтриване на обекта. Заявките за изтриване заобикалят сесията изцяло (което означава, че обектите, изтрити от заявката, но предварително заредени, остават в сесията в същото състояние, както ако не е била изпълнена заявка).
Така че, за да каскадирате изтриването, ще трябва да изпълните заявка за избор, за да намерите всички заглавки, които да изтриете, и след това да преминете през тези заглавки и да ги изтриете с помощта на session.delete()
.