These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Impossible de persister une relation many-to-many
PostPosted: Thu Sep 21, 2006 2:33 am 
Beginner
Beginner

Joined: Sun Jul 31, 2005 6:15 pm
Posts: 28
Bonjour,

Après avoir bien cherché moi-même je me permets de vous présenter une action que je ne parviens pas à réaliser moi-même :

Il s'agit d'une situation classique d'une relation many to many impliquant les table user , role et user_role. Je parviens à persister user et role mais pas leur relation.

Si quelqu'un pouvait me dire où est mon erreur :

Hibernate version: hibernate-3.2.0.cr4

Mapping pour User :
Code:
......
<class name="verlina.domain.model.User" table="user">
       
        <id name="id" column="id">
            <generator class="native"/>
        </id>       
       
        <property name = "login" />
        <property name = "password" />
       
        <set name="roles" table="user_role" cascade="all" lazy="false"  outer-join="true">
            <key column="id_user"/>
            <many-to-many class="verlina.domain.model.Role" column="id_role" />
        </set>
   
    </class>
   ......


Mapping pour Role :
Code:
....
<class name="verlina.domain.model.Role" table="role">
       
        <id name="id" column="id">
            <generator class="native"/>
        </id>
       
        <property name="name"/>
       
        <set name="users" table="user_role" cascade="all" lazy="false" outer-join="true" inverse="true">
            <key column="id_role"/>
            <many-to-many class="verlina.domain.model.User" column="id_user" />
        </set>
   
</class>
.....



Code entre sessionFactory.openSession() et session.close():
Code:
        User u = new User();
        u.setLogin("mimi"); u.setPassword("cracra");
        Role r = new Role();
        r.setName("ROLE_SUPERADMIN5");
        u.addRole(r);
        session.save(u);


Code permettant d'ajouter un role à un user:
Code:
class User{
.....
   public void addRole(Role r){
        getRoles().add(r);
        r.getUsers().add(this);
   }
.....
}


Problème:

Aucun messages d'erreur ou de warning, l'objet role ainsi que l'objet user sont bien persistés dans la base mais pas leur relation, cad que rien n'est ajouté dans la table user_role.

Si vous pouvez m'éclairer sur ce problème surement très classique ce serait vraiment cool.


Top
 Profile  
 
 Post subject: Je me réponds
PostPosted: Thu Sep 21, 2006 7:04 am 
Beginner
Beginner

Joined: Sun Jul 31, 2005 6:15 pm
Posts: 28
En fait j'avais oublié d'appeler tx.commit(), mais c'est quand même troublant qu'appeler session.save() persiste le graphe d'objet mais pas les relations entre ces derniers. Il faut appeler tx.commit() pour que la table de jointure soit mis à jour.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
cron
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.