Bonjour,

J'ai une relation ManyToMany mappée par deux oneToMany/ManyToOne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@Entity
public class ApplicatifDo {
   .....
   @OneToMany(cascade = CascadeType.ALL, mappedBy = "applicatifDo", fetch = FetchType.EAGER, orphanRemoval = true)
   private Set<ApplicatifTerminalDo> applicatifTerminalSet;
   .....
}
 
@Entity
public class ApplicatifTerminalDo {
   ......
   @ManyToOne
   @JoinColumn(name = "idApplicatif", nullable = false)
   private ApplicatifDo applicatifDo;
   @ManyToOne
   @JoinColumn(name = "idTerminal", nullable = false)
   private TerminalDo terminalDo;
 
   @Column
   private String remarques;
   ......
}
 
@Entity
public class TerminalDo {
   ......
   @OneToMany(cascade = CascadeType.ALL, mappedBy = "terminalDo", fetch = FetchType.EAGER, orphanRemoval = true)
   private Set<ApplicatifTerminalDo> applicatifTerminalSet;
   ......
}
J'ai deux DAO, un par entité aux extrémités de la relation, ApplicatifDao et TerminalDao.
J'aimerais, à partir de ces deux DAO, pouvoir mettre à jour les données de jointure. Lorsque par exemple dans mon Set<ApplicatifTerminalDo> j'ajoute de nouveaux éléments, ou que je modifie des données, puis que je merge le tout, les changements s'opèrent bien.
Mais lorsque je supprime un élément du set puis que je merge, l'objet est toujours en base.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
modifyRemarques(firstElement(applicatifDo.getApplicatifTerminalSet()));
applicatifDo.getApplicatifTerminalSet.add(anotherApplicatifTerminal);
applicatifDo.getApplicatifTerminalSet.remove(onceApplicatifTerminal);
Même quand je supprime la référence du côté TerminalDo vers cet élément ApplicatifTerminalDo il reste en base lors du merge.

Y a-t-il moyen de faire ce que j'essaie de faire, ou bien je suis obligé de passer par un DAO sur la table de jointure elle-même pour faire un remove ?

Merci d'avance pour votre aide.