Hai due errori.
Primo errore:hai mappato l'associazione bidirezionale tra intestazione e dettagli due volte:una volta nell'intestazione e una volta nei dettagli. Quando si dispone di un'associazione bidirezionale, uno dei lati (in questo caso il lato dell'intestazione) deve essere dichiarato come l'inverso dell'altro lato, utilizzando il mappedBy
attributo:
@OneToMany(fetch = FetchType.EAGER, orphanRemoval = true, mappedBy = "reminderHeader")
@Cascade(value = { CascadeType.SAVE_UPDATE, CascadeType.DELETE })
@Fetch(FetchMode.SELECT)
private Set<ReminderDetails> reminderDetailslist;
Secondo errore:la cascata DELETE viene applicata solo quando si utilizza Session.delete()
metodo per eliminare l'entità. Le query di eliminazione ignorano completamente la sessione (il che significa che le entità eliminate dalla query ma caricate in precedenza rimangono nella sessione, nello stesso stato come se non fosse stata eseguita alcuna query).
Quindi, per eseguire l'eliminazione a cascata, dovrai eseguire una query select per trovare tutte le intestazioni da eliminare, quindi scorrere queste intestazioni ed eliminarle utilizzando session.delete()
.