Mysql
 sql >> Base de données >  >> RDS >> Mysql

Erreurs @OneToMany dans MySQL :Impossible de supprimer ou de mettre à jour une ligne parent :une contrainte de clé étrangère échoue

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() .