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 :

Problème de mapping de relation et de compréhension!


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 55
    Points : 49
    Points
    49
    Par défaut Problème de mapping de relation et de compréhension!
    Salut à tous et toutes,
    j'aimerais un coup de main en ce qui concerne le mapping! Entre le tuto de developpez, le plugin HibernateSynchronizer et la doc d'hibernate:
    je suis perdu!
    Voilà un exemple simple de mon application dans lequel je m'embrouille:
    Dans ma base de données, j'ai:
    • une table learner(idLearner, ...) = mes étudiants
    • une table mission(idMission,...) = mes TP
    • une table de jointure linkMissionLearn(idMissionLearn, idLearner, idMission) = quels étudiants font quels TP (un étudiant participe à plusieurs TP, et un TP a bien entendu plusieurs étudiants!). Au passage, est-il nécessaire pour être gérée par Hibernate que cette table de jointure ait son propre identifiant?...


    Et voilà mon gros problème, je n'arrive pas à mapper cette relation many-to-many correctement! Selon la doc Hibernate, il faut rajouter dans chaque classe de mapping Learner et Mission l'équivalent d'un Set, ce que j'ai fait de la sorte:

    mapping Mission (en gras l'ajout pour gérer la relation):
    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
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    	"-//Hibernate/Hibernate Mapping DTD//EN"
    	"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
    
    <hibernate-mapping package="hibernate">
    	<class name="Mission" table="mission">
    		<id
    			column="idMission"
    			name="IdMission"
    			type="integer"
    		>
    			<generator class="increment" />
    		</id>
    		<property
    			column="lastModification"
    			name="LastModification"
    			not-null="true"
    			type="timestamp"
    		 />
    		<property
    			column="name"
    			length="80"
    			name="Name"
    			not-null="true"
    			type="string"
    		 />	
                    <property
    			column="fileXML"
    			name="FileXML"
    			not-null="true"
    			type="string"
    		 />
                    <set name="LinkmissionlearnSet" table="linkMissionLearn">
            	<key column="idMission"/>
            	<many-to-many column="idLearner"
                	class="Learner"/>
       		 </set>
    	</class>
    </hibernate-mapping>
    mapping de Learner:
    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//EN"
    	"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
    
    <hibernate-mapping>
    	<class name="hibernate.Learner" table="learner">
    		 <id 
    			name="IdLearner" type="integer" length="10">
    			<column name="idLearner" not-null="true"/>
     			<generator class="increment"/>
     		</id>
     		
     		<set name="LinkmissionlearnSet" table="linkMissionLearn">
            	<key column="idLearner"/>
            	<many-to-many column="idMission"
                	class="Mission"/>
       		 </set>
       		 
    	</class>
    </hibernate-mapping>
    Voilà le fichier de config d'hibernate:
    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
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-configuration
        PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
     
    <hibernate-configuration>
    	<session-factory>
    		<!-- local connection properties -->
    		<property name="hibernate.connection.url">
    			jdbc:mysql://127.0.0.1:3306/base
    		</property>
    		<property name="hibernate.connection.driver_class">
    			com.mysql.jdbc.Driver
    		</property>
    		<property name="hibernate.connection.username">user</property>
    		<property name="hibernate.connection.password">user</property>
    		<!-- property name="hibernate.connection.pool_size"></property -->
     
    		<!-- dialect for MySQL -->
    		<property name="dialect">
    			org.hibernate.dialect.MySQLDialect
    		</property>
     
    		<property name="hibernate.show_sql">true</property>
    		<property name="hibernate.use_outer_join">true</property>
    		<!-- <property name="hibernate.transaction.factory_class">
    			net.sf.hibernate.transaction.JTATransactionFactory
    			</property>
    			<property name="jta.UserTransaction">
    			java:comp/UserTransaction
    			</property>-->
    		<property name="hibernate.transaction.factory_class">
    			org.hibernate.transaction.JDBCTransactionFactory
    		</property>
    		<mapping resource="Mission.hbm" />
    		<mapping resource="Learner.hbm" />
    	</session-factory>
    </hibernate-configuration>
    Avec ces deux ajouts, j'obtiens une erreur de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Initial SessionFactory creation failed.org.hibernate.MappingException: An association from the table linkMissionLearn refers to an unmapped class: Mission
    ou encore, après quelques corrections:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Initial SessionFactory creation failed.org.hibernate.MappingException: Association references unmapped class: hibernate.Linkmissionlearn
    Je me dis que la classe Mapping est pourtant bien mappée... Peut-être faut-il que je mappe également la table de jointure?...
    Ensuite, j'ai lu dans plusieurs post du forum qu'il valait mieux un fichier de mapping par table, ce qui me paraît sensé et plus "naturel", du coup j'ai aussi fait un fichier de mapping pour la table de jointure (auquel je n'ai pas touché, entièrement généré par le plugin d'Eclipse):
    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
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    	"-//Hibernate/Hibernate Mapping DTD//EN"
    	"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
     
    <hibernate-mapping package="hibernate">
    	<class name="Linkmissionlearn" table="linkmissionlearn">
    		<id
    			column="idLinkMissionLearn"
    			name="IdLinkMissionLearn"
    			type="integer"
    		>
    			<generator class="vm" />
    		</id>
    		<many-to-one
    			class="Learner"
    			name="IdLearn"
    			not-null="true"
    		>
    			<column name="idLearn" />
    		</many-to-one>
    		<many-to-one
    			class="Mission"
    			name="IdMission"
    			not-null="true"
    		>
    			<column name="idMission" />
    		</many-to-one>
    	</class>
    </hibernate-mapping>

    Mais je me demande si cela ne génère pas de conflit avec les fichiers de mapping de Mission et Learner dans lesquels j'ai rajouté le code?

    Enfin, n'en faisons pas un roman (c'est déjà fait apparemment, oups!) Mais comme vouos pouvez le voir, je ne comprends pas grand chose au mapping des relations (pourtant je suis sûr que ce n'est pas si compliqué!).
    Si quelqu'un pouvait m'expliquer clairement la démarche à suivre pour mapper cette relation... Ca m'aiderait grandement, merci d'avance!

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 55
    Points : 49
    Points
    49
    Par défaut
    Bon! je devais pas avoir les yeux en face des trous hier...
    J'ai repris la doc hibernate à tête reposée et je l'ai suivie, ça fonctionne nickel!
    Il "suffit" de mapper les tables de base et pas les tables de jointures en rajoutant des collections dans les classes participant aux jointures, avec des set dans les fichiers de mapping de ces classes...
    Merci @ moi

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 19/07/2013, 19h31
  2. Mapping et relation : problème à la suppression
    Par Mr. Angus dans le forum Doctrine2
    Réponses: 2
    Dernier message: 28/07/2011, 05h44
  3. [PERL] Problème avec map
    Par LE NEINDRE dans le forum Langage
    Réponses: 9
    Dernier message: 05/10/2005, 09h48
  4. [CASTOR]Problème de mapping de données
    Par chuck norris dans le forum Persistance des données
    Réponses: 1
    Dernier message: 13/07/2005, 22h01
  5. [Struts] Problème de mapping
    Par ArseNic dans le forum Struts 1
    Réponses: 5
    Dernier message: 10/02/2005, 10h11

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