Bonjour,
Voilà j'ai un gros soucis lors de la suppression d'un objet en base.
Je m'explique, j'ai une relation N-N entre deux tables cette relation N-N est représenté par une cim, cette cim est directement mappé avec une classe du même nom.
Mais cette classe(utilisateurProfil) 'cim' référence une autre classe utilisateurProfilId qui elle même contient les références vers les objet Utilisateur et profil.
Voici un extrait du code :
UtilisateurProfilId.java :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <hibernate-mapping> <class name="com.teamlog.eloi.model.domaine.utilisateur.profil.UtilisateurProfil" table="utilisateur_profil"> <composite-id name="utilisateurProfilId" class="com.teamlog.eloi.model.domaine.utilisateur.profil.UtilisateurProfilId"> <key-many-to-one name="profil" class="com.teamlog.eloi.model.domaine.profil.Profil"> <column name="PROFIL_ID" /> </key-many-to-one> <key-many-to-one name="utilisateur" class="com.teamlog.eloi.model.domaine.utilisateur.Utilisateur"> <column name="UTILISATEUR_ID" /> </key-many-to-one> </composite-id> </class> </hibernate-mapping>
UtilisateurProfilId.java :
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 // Fields private Profil profil; private Utilisateur utilisateur; // Constructors /** default constructor */ public AbstractUtilisateurProfilId() { } /** full constructor */ public AbstractUtilisateurProfilId(Profil profil, Utilisateur utilisateur) { this.profil = profil; this.utilisateur = utilisateur; } // Property accessors public Profil getProfil() { return this.profil; } public void setProfil(Profil profil) { this.profil = profil; } public Utilisateur getUtilisateur() { return this.utilisateur; } public void setUtilisateur(Utilisateur utilisateur) { this.utilisateur = utilisateur; } @Override public boolean equals(Object arg0) { // TODO Auto-generated method stub return super.equals(arg0); } @Override public int hashCode() { // TODO Auto-generated method stub return super.hashCode(); }
Mais voilà j'arrive à récup. le UtilisateurProfil avec son UtilisateurProfilId, j'arrive à y faire des manip mais impossible de le delete....
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 public class UtilisateurProfil extends AbstractUtilisateurProfil implements java.io.Serializable { // Constructors /** default constructor */ public UtilisateurProfil() { } /** full constructor */ public UtilisateurProfil(UtilisateurProfilId id) { super(id); } public List findAllElementsByUtilisateurId(Long utilisateurId){ List<UtilisateurProfil> listUtilisateurProfil = (List) ((UtilisateurProfilDAO)this.getDAO()).findAllElementsByUtilisateurId(utilisateurId); return listUtilisateurProfil; } }
voici l'éxception :
ERROR [2008-12-24 14:47:43,984]: ServiceExceptiona different object with the same identifier value was already associated with the session: [com.teamlog.eloi.model.domaine.utilisateur.profil.UtilisateurProfil#com.teamlog.eloi.model.domaine.utilisateur.profil.UtilisateurProfilId@352b57]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.teamlog.eloi.model.domaine.utilisateur.profil.UtilisateurProfil#com.teamlog.eloi.model.domaine.utilisateur.profil.UtilisateurProfilId@352b57] [com.teamlog.eloi.facade.authentification.AuthentificationFacade] [updateRelationProfilUtilisateur() 132]
com.teamlog.fwk.core.service.ServiceException: a different object with the same identifier value was already associated with the session: [com.teamlog.eloi.model.domaine.utilisateur.profil.UtilisateurProfil#com.teamlog.eloi.model.domaine.utilisateur.profil.UtilisateurProfilId@352b57]; nested exception is org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.teamlog.eloi.model.domaine.utilisateur.profil.UtilisateurProfil#com.teamlog.eloi.model.domaine.utilisateur.profil.UtilisateurProfilId@352b57]
at com.teamlog.eloi.service.utilisateur.profil.UtilisateurProfilService.deleteUtilisateurProfil(UtilisateurProfilService.java:103)
J'ai cherché partout et 'ai tout essayé mais impossible de trouver la solution....
Merci !
Partager