IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Association bidirectionnelle many-to-many : update non pris en compte


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Par défaut Association bidirectionnelle many-to-many : update non pris en compte
    Je possède deux tables Utilisateur et Groupe et j'ai une table d'association Utilisateur_Groupe.

    Un utilisateur peut être dans plusieurs groupes et un groupe peut contenir plusieurs utilisateurs. J'ai donc fait deux many-to-many dans mes fichiers de mappings :

    User.hbm.xml :
    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
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     
     <hibernate-mapping>
     
     	<class name="User" table="UTILISATEUR">
     		<id name="idUser" column="id_user">
     			<generator class="native" />
     		</id>
     
     		<property name="login" column="LOGIN" />
     		<property name="password" column="PASSWORD" />
     		<property name="isActive" column="IS_ACTIVE" />
     		<property name="isAdmin" column="IS_ADMIN" />
     		<property name="email" column="EMAIL" />
     
     		<set name="groupes" table="UTILISATEUR_GROUPE">
              <key column="ID_USER"/>
              <many-to-many column="ID_GROUPE" class="Groupe"/>
        	</set>
     	</class>
     
     </hibernate-mapping>
    Groupe.hbm.xml :
    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
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     
     <hibernate-mapping>
     
     	<class name="Groupe" table="GROUPE">
     		<id name="idGroupe" column="id_groupe">
     			<generator class="native" />
     		</id>
     
     		<property name="name" column="NAME" />
     
     		<set name="users" table="UTILISATEUR_GROUPE" inverse="true" lazy="false">
              <key column="ID_GROUPE"/>
              <many-to-many column="ID_USER" class="User"/>
        	</set>
     	</class>
     
     </hibernate-mapping>
    J'ai mes deux classes Java suivantes :

    Groupe.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
    public class Groupe implements Serializable {
     
    	private static final long serialVersionUID = 2672915341934914235L;
     
    	private Integer idGroupe;
    	private String name;
    	private Set<User> users = new HashSet<User>();
     
    	public Set<User> getUsers() {
    		return users;
    	}
    	public void setUsers(Set<User> users) {
    		this.users = users;
    	}
    	public void addUser(User user) {
    		this.users.add(user);
    	}
    	public Integer getIdGroupe() {
    		return idGroupe;
    	}
    	public void setIdGroupe(Integer idGroupe) {
    		this.idGroupe = idGroupe;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
     
     
     
    }
    User.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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    public class User implements Serializable {
     
    	private static final long serialVersionUID = -5758827873119865415L;
     
    	private Integer idUser;
    	private String login;
    	private String password;
    	private Boolean isActive;
    	private Boolean isAdmin;
    	private String email;
    	private Set<Groupe> groupes;
     
     
    	public User() {}
     
     
    	public Set<Groupe> getGroupes() {
    		return groupes;
    	}
     
    	public void setGroupes(Set<Groupe> groupes) {
    		this.groupes = groupes;
    	}
     
    	public Integer getIdUser() {
    		return idUser;
    	}
     
    	public void setIdUser(Integer idUser) {
    		this.idUser = idUser;
    	}
     
    	public String getLogin() {
    		return login;
    	}
     
    	public void setLogin(String login) {
    		this.login = login;
    	}
     
    	public String getPassword() {
    		return password;
    	}
     
    	public void setPassword(String password) {
    		this.password = password;
    	}
     
    	public Boolean getIsActive() {
    		return isActive;
    	}
     
    	public void setIsActive(Boolean isActive) {
    		this.isActive = isActive;
    	}
     
    	public Boolean getIsAdmin() {
    		return isAdmin;
    	}
     
    	public void setIsAdmin(Boolean isAdmin) {
    		this.isAdmin = isAdmin;
    	}
     
    	public String getEmail() {
    		return email;
    	}
     
    	public void setEmail(String email) {
    		this.email = email;
    	}
     
    }
    Dans ma classe DAO je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void addUserToGroupe(User user, Groupe groupe) {
    		Session session = sessionFactory.getCurrentSession();
     
    		Groupe groupeInBase = (Groupe)session.load(Groupe.class, groupe.getIdGroupe());
    		System.out.println("GroupeInBase : " + groupeInBase.getUsers().size());
    		groupeInBase.addUser(user);
    		session.save(groupeInBase);
    		System.out.println("GroupeInBase after : " + groupeInBase.getUsers().size());
    	}
    A noter que j'utilise Hibernate 3.3.2 et Spring 2.5.5. Je fais mes tests en utilisant Junit 4 et j'ai un test qui ne passe, celui qui doit ajouter un utilisateur à un groupe. Je fais juste appel à la méthode de la DAO ci-dessus et compare les résultats de ma base avec ceux attendus.

    Le problème c'est que je n'ai pas d'update/insertion de mon utilisateur via la méthode sus-cité. Hibernate ne fait que des select, aucun update.

    J'ai essayé avec un cascade="save-update" dans mon fichier Groupe.hbm.xml mais je me prends une exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:
    Je suis un peu paumé parceque je ne comprends pas pourquoi je ne peux pas ajouter de nouvel utilisateur dans un groupe J'ai retourné le web pour voir ce que je rate mais je ne pige pas donc je m'en remets à vous !

    Merci pour l'aide !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 79

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Par défaut
    Citation Envoyé par fadjerx Voir le message
    Merci pour ton aide mais ça n'apporte malheureusement rien concernant mon problème (ou alors j'ai raté l'élément que tu voulais pointer)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Par défaut
    Ca venait du fait qu'il faut ajouter le user au groupe mais également le groupe au user.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [QR 4.05] Propriété imprimante non pris en compte
    Par portu dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 30/09/2008, 14h21
  2. Update non pris en compte!
    Par cseb73 dans le forum Requêtes
    Réponses: 9
    Dernier message: 29/06/2008, 15h34
  3. Association automatique avec du many-to-many
    Par e1lauren dans le forum Hibernate
    Réponses: 1
    Dernier message: 06/02/2008, 16h00
  4. Accents non pris en compte dans les requêtes SELECT
    Par YanK dans le forum Requêtes
    Réponses: 1
    Dernier message: 30/08/2005, 10h57
  5. [event] keyListener non pris en compte
    Par pierre.zelb dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 03/08/2005, 08h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo