NonUniqueObject sur un objet id
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 :
Code:
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:
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();
} |
UtilisateurProfilId.java :
Code:
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;
}
} |
Mais voilà j'arrive à récup. le UtilisateurProfil avec son UtilisateurProfilId, j'arrive à y faire des manip mais impossible de le delete....
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 !