Vous avez deux erreurs.
Première erreur :vous avez mappé deux fois l'association bidirectionnelle entre l'en-tête et les détails :une fois dans l'en-tête et une fois dans les détails. Lorsque vous avez une association bidirectionnelle, l'un des côtés (le côté de l'en-tête, dans ce cas) doit être déclaré comme l'inverse de l'autre côté, en utilisant le mappedBy
attribut :
@OneToMany(fetch = FetchType.EAGER, orphanRemoval = true, mappedBy = "reminderHeader")
@Cascade(value = { CascadeType.SAVE_UPDATE, CascadeType.DELETE })
@Fetch(FetchMode.SELECT)
private Set<ReminderDetails> reminderDetailslist;
Deuxième erreur :la cascade DELETE n'est appliquée que lorsque vous utilisez le Session.delete()
méthode pour supprimer l'entité. Les requêtes de suppression contournent entièrement la session (ce qui signifie que les entités supprimées par la requête mais précédemment chargées restent dans la session, dans le même état que si aucune requête n'avait été exécutée).
Ainsi, pour cascader la suppression, vous devrez exécuter une requête de sélection pour trouver tous les en-têtes à supprimer, puis boucler sur ces en-têtes et les supprimer à l'aide de session.delete()
.