Masz dwa błędy.
Pierwszy błąd:dwukierunkowe powiązanie między nagłówkiem a szczegółami zostało zmapowane dwukrotnie:raz w nagłówku i raz w szczegółach. Gdy masz skojarzenie dwukierunkowe, jedna ze stron (w tym przypadku jedna strona nagłówka) musi być zadeklarowana jako odwrotność drugiej strony, używając mappedBy
atrybut:
@OneToMany(fetch = FetchType.EAGER, orphanRemoval = true, mappedBy = "reminderHeader")
@Cascade(value = { CascadeType.SAVE_UPDATE, CascadeType.DELETE })
@Fetch(FetchMode.SELECT)
private Set<ReminderDetails> reminderDetailslist;
Drugi błąd:kaskada DELETE jest stosowana tylko wtedy, gdy używasz Session.delete()
metoda usunięcia jednostki. Zapytania usuwające całkowicie omijają sesję (co oznacza, że encje usunięte przez zapytanie, ale wcześniej załadowane, pozostają w sesji, w takim samym stanie, jak gdyby żadne zapytanie nie zostało wykonane).
Tak więc, aby kaskadowo usunąć, musisz wykonać zapytanie wybierające, aby znaleźć wszystkie nagłówki do usunięcia, a następnie wykonać pętlę nad tymi nagłówkami i usunąć je za pomocą session.delete()
.