-->
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: Transformer un Many-to-Many en 2 One-to-Many
PostPosted: Fri Apr 04, 2008 2:38 am 
Newbie

Joined: Tue Jan 30, 2007 5:58 pm
Posts: 14
Bonjour,

je cherche à transformer 1 association Many-to-Many avec 2 classes en 2 associations One-To-Many avec 3 classes.

D'après Martin Fowler, cela fonctionne bien.

exemple:

1 Association Many-to-Many
User *------* Media
|
Vote

2 Associations One-To-Many
User-1----*-Vote-*----1-Media

Ma configuration Hibernate,
Association User-->Vote: inverse=true sur le Set du Vote dans la classe User
Association Media-->Vote: inverse=true sur le Set du Vote dans la classe Media

Code:
classe User
Set votes = new HashSet(); //one-to-many
Set medias = new HashSet(); //one-to-many

classe Media
Set votes = new HashSet();
User user; //many-to-one

classe Vote
User user; //many-to-one
Media media; //many-to-one
Long id: //hibernate.id
Integer note; //valeur du vote (de 1 à 5)


j'ai une méthode addVote(Vote) dans la classe Media qui me permet de persister un Vote en BD.
Code:
addVote(Vote v) {
v.setMedia(this);
v.setUser(media.getUser());
votes.add(v);
}



Cela fonctionne, mais, il y a 2 enregistrements en BD et non un seul !!!

Avez-vous des conseils à me donner pour que cela fonctionne bien ?

Merci pour votre aide..


Top
 Profile  
 
 Post subject:
PostPosted: Mon Apr 07, 2008 7:32 am 
Newbie

Joined: Thu Mar 27, 2008 8:44 am
Posts: 8
Bonjour,

J'ai eu à faire le même genre de choses avec deux one to many et ça fonctionne très bien.

Est ce qu'il serait possible que tu nous donne le mapping de tes classes ?

Voici un exemple de ce que j'ai fait, pour te donner une idée :
j'ai une table user, une table site et une table user_site avec une relation one to many entre ma table user et ma table user_site et une autre entre ma table site et ma table user_site.

Mapping table site
Code:
<hibernate-mapping>
    <class name="Site" table="sites">
   
    <id name="id" type="integer">
       <generator class="increment"/>       
    </id>
   
    <property name="name">
        <column name="name"/>
    </property>
   
    <set name="siteUsers" inverse="true" cascade="all-delete-orphan">
       <key column="site"/>
       <one-to-many class="UserSite"/>
    </set>
           
</class>
</hibernate-mapping>


Mapping table user
Code:
<hibernate-mapping>
    <class name="User table="users">
   
    <id name="id" type="integer">
       <generator class="increment"/>       
    </id>
   
    <property name="name">
        <column name="name"/>
    </property>

    <set name="userSites" inverse="true" cascade="all-delete-orphan">
       <key column="user"/>
       <one-to-many class="UserSite"/>
    </set>
 
</class>
</hibernate-mapping>


Mapping table user_site :
Code:
<hibernate-mapping>
    <class name="UserSite" table="user_site">
   
    <id name="id" type="int">
      <generator class="increment"/>       
    </id>
   
    <property name="validated">
        <column name="validated"/>
    </property>
   
   <many-to-one name="site" class="Site">
     <column name="site" sql-type="number"/>
   </many-to-one>
   
   <many-to-one name="user" class="USer">
     <column name="user"/>
   </many-to-one>
   
</class>
</hibernate-mapping>


En espérant que cela puisse t'aider.
Bon courage.


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:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.