Bonjour ,
j'ai un problème de sauvegarde sur plusieurs objets liés entre eux.
A la base j'ai deux types d'objets A et B, avec un objet LienAB qui pointe sur les deux autres avec des relations one-to-many.
Au démarrage j'ai :
a1 -> lien1 <- b1
a2 -> lien2 <- b1
Mon action porte sur la modification de lien1, or selon les règles de l'appli elle entraine aussi :
- une modification des autres liens liés à B, donc ici lien2
- une création de lien3 entre a2 et b1 à partir du lien2 existant déjà
Au niveau de mes objets, je fais donc :
En faisant ça, j'ai des update sur a1 et lien1, mais rien de plus. Or il me faudrait aussi un update sur lien2 et un insert sur lien3.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 lien1.modification(); Set autresLiens = lien1.getB().getListeAutresLiens; while(autresLiens ) { LienAB autreLien = autresLiens.next(); LienAB nouveauLien = autreLien.clone(); nouveauLien modification(); autresLiens.add(nouveauLien); autreLien modification(); } flush();
Les objets sont tous en sessions. Si je force la sauvegarde via la méthode saveOrUpdate sur a2, j'obtiens une Exception : org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session sur l'objet de type A.
J'ai déjà vérifié la méthode equals, elle est correctement implémentée.
Hibernate est il bien adapté pour ces cas tordus ?
Partager