Bonjour,
J'ai une relation many to many entre deux objets :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 @Entity public class Profil { @Id @GeneratedValue(strategy = GenerationType.AUTO) protected int id; @ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE}) @JoinTable(name="profil_droit", joinColumns = @JoinColumn(name = "profil_id"), inverseJoinColumns = @JoinColumn(name = "droit_id")) protected List<Droit> droits; }Dans Profil, c'est OK :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 @Entity public class Droit { @Id @GeneratedValue(strategy = GenerationType.AUTO) protected int id; @ManyToMany(mappedBy = "droits") protected List<Profil> profils; }
L'ajout de droits à une instance profil et la sauvegarde de cette instance fonctionne bien.
La suppression d'une instance profil efface bien les données de la table de relation (profil_droit) si on ôte le CascadeType.DELETE qui lui essaye également de supprimer les objets Droit qui peuvent exister par ailleurs (violation de contrainte).
Dans Droit, les cascades ne fonctionne pas.
Il ne met pas à jour et n'efface pas en cascade. Il râle lors d'une suppression car il y a des violations de contrainte.
Si je met @ManyToMany(mappedBy = "droits", cascade={CascadeType.DELETE}), il efface carrément les profils qui contenaient ce droit au lieu de simplement l'enlever de la table de relation.
Avant d'essayer de passer par une jointure many to many explicite (qui m'oblige à créer un objet pour la table intermédiaire), est-ce que quelqu'un a utiliser avec succès des relations many to many et dans les deux sens (suppression, maj) !
Dans ce cas, avez vous une idée du problème ?
J'ai regardé beaucoup de forums et ce problème (ou similaire) semble récurrent mais il n'y a jamais de solution. Est-ce à dire que personne ne fait de many/many implicite utilisée des 2 côtés ???
Partager