-->
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: Mapper une relation (*) -- (0,1)
PostPosted: Sat Jun 14, 2008 3:29 pm 
Newbie

Joined: Sat Jun 14, 2008 12:54 am
Posts: 2
Bonjour,

Voilà je tente de réaliser la mappage avec Hibernate 3 de la relation suivante :

* Un membre peut avoir 0 ou 1 ville préférée (0, 1).
* Une ville peut être la ville préférée de plusieurs membres (*).

Logiquement je devrais donc avoir une table pour mes membres, une autre pour mes villes et enfin une table correspondant à la relation qui permet de stocker la ville préférée de chaque membre qui en a choisi une (pas de clé étrangère nulle dans mon modèle ainsi, conseillé d'ailleurs dans la doc d'Hibernate au début du chapitre 7).

create table member ( id bigint not null primary key )
create table preferred_city_member ( member_id not null primary key, city_id bigint not null)
create table city ( id bigint not null primary key )

Je n'arrive à définir le mapping Hibernate correspondant. Je me suis orienté vers un mapping du type "association bidirectionnelle avec table de jointure", puisque cela ressemble beaucoup à la solution que je veux mettre en place mais je n'arrive pas à obtenir le résultat que je souhaite.

Merci

Julien


Top
 Profile  
 
 Post subject:
PostPosted: Sun Jun 22, 2008 8:19 pm 
Newbie

Joined: Sat Jun 14, 2008 12:54 am
Posts: 2
J'ai mis en place ce mapping pour tenter de représenter la situation évoquée ci-dessus :
Code:
<hibernate-mapping>
 
  <class name="Member" table="member">
   
    <id name="id" column="member_id">
      <generator class="native" />
    </id>
   
    <join table="preferred_followed_city_member" inverse="true" optional="true">
      <key column="member_id" />
      <many-to-one name="preferredFollowedCity" column="city_id" not-null="true" />
    </join>   

  </class>

</hibernate-mapping>

<hibernate-mapping>
 
  <class name="City" table="city">
   
    <id name="id" column="city_id">
      <generator class="increment" />
    </id>

    <set name="membersWhoPreferCity" table="preferred_followed_city_member">
      <key column="city_id" />
      <many-to-many column="member_id" unique="true" class="com.livemeteo.model.member.Member" />
    </set>

  </class>
 
</hibernate-mapping>


Maintenant voilà ce que me génère ce mapping en MySQL :

Code:
CREATE TABLE IF NOT EXISTS `city` (
  `city_id` int(11) NOT NULL,
  PRIMARY KEY  (`city_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `member` (
  `member_id` int(11) NOT NULL auto_increment,
  PRIMARY KEY  (`member_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `preferred_followed_city_member` (
  `member_id` int(11) NOT NULL,
  `city_id` int(11) NOT NULL,
  PRIMARY KEY  (`city_id`,`member_id`),
  KEY `FK6C040F3DFB2395E8` (`member_id`),
  KEY `FK6C040F3D8DF79E17` (`city_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


J'ai suivi le modèle de mapping de la documentation Hibernate pour créer une association bidirectionnelle avec table de jointure (un à plusieurs) http://www.hibernate.org/hib_docs/v3/reference/fr/html/associations.html#assoc-bidirectional-join-12m.

Pourtant je n'obtiens pas le même résultat généré en terme de table que ce qu'ils décrivent dans la doc. En particulier, je me retrouve avec une clé primaire composée de mes deux clés étrangères.

J'avoue ne pas voir le problème, mon mapping me semble bien fait.


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.