Bonjour,
J'ai une relation ManyToMany mappée par deux oneToMany/ManyToOne :
J'ai deux DAO, un par entité aux extrémités de la relation, ApplicatifDao et TerminalDao.
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'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.
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.
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);
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.
Partager