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 mapping héritage


Sujet :

Hibernate Java

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Problème mapping héritage
    Bonjours à tous,

    voila j'ai un problème pour mapper mon diagramme de classe. Mon premier problème est l'héritage.

    Mon diagramme de classe est le suivant, ce n'est pas la version complète, mais déjà lorsque j'aurais réussi à mapper ça, j'aurais déjà bien avancé.

    Le diagramme de classe est le suivant :



    Droits.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
     
    <?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="Droits" table="Droits">
    		<id name="id" column="DROIT_ID" type="long">
    			<generator class="native"/>
    		</id>
    		<property name="unDroit" type="integer" column="UN_DROIT"/>
     
    		<!--// Une collection de personnes -->
    		<set name="personnes" inverse="true">
    			<key column="DROIT_ID" not-null="true"/>
    			<one-to-many class="Personnes"/>
    		</set>
    	</class>
    </hibernate-mapping>
    Personnes.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
    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
     
    <?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="Personnes" table="Personnes">
    		<id name="id" column="PERSONNE_ID" type="long">
    			<generator class="native"/>
    		</id>
    		<discriminator column="PERSONNE_TYPE" type="string"/>
    		<property name="nom" type="string" column="NOM"/>
    		<property name="prenom" type="string" column="PRENOM"/>
    		<property name="login" type="string" column="LOGIN"/>
    		<property name="pass" type="string" column="PASS"/>
     
    		<!-- // many-to-one vers DROITS -->
    		<many-to-one column="DROIT_ID" name="Droit" class="Droits"/>
     
    		<!-- // Sous class Administrateur -->
    		<subclass name="administrateur" discriminator-value="ADMINISTRATEUR">
    			<join table="ADMINISTRATEUR">
    				<key column="ADMINISTRATEUR_ID"/>
    			</join>
    		</subclass>
     
    		<!-- // Sous class Utilisateur -->
    		<subclass name="utilisateur" discriminator-value="UTILISATEUR">
    			<join table="UTILISATEUR">
    				<key column="UTILISATEUR_ID"/>	
     
    				<!-- <set name="photos" cascade="persist.save-update">
    					<key column="UTILISATEUR_ID" not-null="true"/>
    					<one-to-many class="Photos"/>
    				</set>
     
    				<set name="mensurations" cascade="persist.save-update">
    					<key column="UTILISATEUR_ID" not-null="true"/>
    					<one-to-many class="Mensurations"/>
    				</set>
     
    				<set name="seances" cascade="persist.save-update">
    					<key column="UTILISATEUR_ID" not-null="true"/>
    					<one-to-many class="Seances"/>
    				</set>
     
    				Mapper Visibilite ??
    				-->			
    			</join>
    		</subclass>
     
    	</class>
    </hibernate-mapping>
    Mensurations.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
    26
    27
    28
    29
    <?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="Mensurations" table="Mensurations">
    		<id name="id" column="MENSURATION_ID"  type="Long">
    			<generator class="native"/>
    		</id>
    		<property name="taille" type="double"/>
    		<property name="poids" type="double"/>
    		<property name="cou" type="double"/>
    		<property name="epaule" type="double"/>
    		<property name="poitrine" type="double"/>
    		<property name="biceps" type="double"/>
    		<property name="avantbras" type="double"/>
    		<property name="tourtaille" type="double"/>
    		<property name="cuisse" type="double"/>
    		<property name="mollet" type="double"/>
    		<property name="date" type="timestamp" column="MENSURATION_DATE"/>
     
    		<!--// Aucune instance d'utilisateur car unidirectionnel-->
     
    		<!--// Une collection de photos (unidirectionnel)-->
    		<set name="photos" cascade="persist.save-update">
    			<key column="MENSURATION_ID" not-null="true"/>
    			<one-to-many class="Photos"/>
    		</set>
     
    	</class>
    </hibernate-mapping>
    Seance.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
    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
    <?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="Seances" table="Seances">
    		<id name="id" column="SEANCE_ID"  type="Long">
    			<generator class="native"/>
    		</id>
    		<discriminator column="SEANCE_TYPE" type="string"/>
    		<property name="duree" type="int" column="duree"/>
    		<property name="dateDebut" type="timestamp" column="date_debut"/>
    		<property name="dateFin" type="timestamp" column="date_fin"/>
     
    		<!--// Sous class Footing-->
    		<subclass name="Footing" discriminator-value="FOOTING">
    			<join table="FOOTING">
    				<key column="FOOTING_ID"/>
    				<property name="pourcentage" type="int" column="pourcentage"/>
    				<!--// many-to-one vers Parcourt-->
    				<many-to-one name="Parcourt" class="Parcourt" column="PARCOURT_ID"/>
    			</join>
    		</subclass>
     
    		<!--// Sous class Etirement-->
    		<subclass name="Etirement" discriminator-value="ETIREMENT">
    			<join table="ETIREMENT">
    				<key column="ETIREMENT_ID"/>
    				<!--// Collection d'exercices d'etirements-->
    				<!--<set name="etirementExo" table="Etir_EtirExo" cascade="persist.save-update" fetch="select">
    					<key column="ETIREMENT_ID" not-null="true"/>
    					<many-to-many column="ETIREMENTEXO_ID" class="EtirementExo" fetch="select"/>
    				</set>-->
    			</join>
    		</subclass>
     
    		<!--// Sous class Musculation-->
    		<subclass name="Musculation" discriminator-value="MUSCULATION">
    			<join table="MUSCULATION">
    				<key column="MUSCULATION_ID"/>
    				<!--// many-to-one vers Niveau-->
    				<many-to-one name="niveau" class="Niveau" column="NIVEAU_ID"/>
    				<!--// Collection de series-->
    				<!--<set name="series" cascade="persist.save-update">
    					<key column="MUSCULATION_ID" not-null="true"/>
    					<one-to-many class="Series"/>
    				</set>-->
    			</join>
    		</subclass>
     
    	</class>
    </hibernate-mapping>
    Photos.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
    <?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="Photos" table="Photos">
    		<id name="id" column="PHOTOS_ID" type="long">
    			<generator class="native"/>
    		</id>
    		<property name="nom" type="string"/>
    		<property name="position" type="string"/>
    		<property name="lien" type="string"/>
    		<property name="date" type="timestamp" column="PHOTO_DATE"/>
    	</class>
    </hibernate-mapping>
    Donc le problème est dans le mapping de Personnes.hbm.xml, les sous classes qui sont mappés par des <subclass><joint ...> n'acceptent pas les balises <set>. C'est le message d'erreur que m'indique eclipse. D'après la DTD, il est exacte qu'il n'est pas possible d'insérer ces balises à cet endroit.
    J'ai donc exactement le même problème pour la classe mère Séances, même si les relations 1..n ne sont pas représenté sur le diagramme de classe partiel affiché précédemment.

    Dans les codes présentés si dessus, les balises <set> ont été commentés.

    Alors je me demande comment je pourrais d'en un premier temps réaliser le mapping des classes Droits, Personnes, Administrateurs, Utilisateurs, Visibilité, Mensurations, Photos, Seances, Etirements et Footing.

    Les classes Personnes et Seances sont des classes abstraites qui sont héritées respectivement par Administrateur, Utilisateurs et Footing, Etirements.

    Si vous avez besoin de toutes autres informations, n'hésitez pas.

    Merci.

  2. #2
    Membre confirmé Avatar de ruscov
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2007
    Messages : 347
    Points : 500
    Points
    500
    Par défaut
    Essaye un peu d'utiliser à la place de subclass, la balise joined-subclass.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     <joined-subclass name="packagexx.yyy" table="MA_TABLE">
    	        <key column="ID"/>
     
    ...
     
    </joined-subclass>
    Entre ces balises on peut mettre des set. en tous cas ca fonctionne chez moi.

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci ! ça a l'air de marcher avec la balise <subclass>

Discussions similaires

  1. [Mapping] Problème mapping dans héritage
    Par bonapart002 dans le forum Hibernate
    Réponses: 0
    Dernier message: 16/10/2012, 09h37
  2. Problème mapping héritage
    Par oraur dans le forum Hibernate
    Réponses: 1
    Dernier message: 06/08/2010, 11h49
  3. Problème de mapping - héritage - list
    Par Marty000 dans le forum Hibernate
    Réponses: 0
    Dernier message: 18/06/2009, 11h07
  4. Problème d'héritage et de mapping
    Par Yudge dans le forum Hibernate
    Réponses: 7
    Dernier message: 20/05/2009, 09h38
  5. Problème d'héritage d'une méthode protégée
    Par shenron666 dans le forum C++
    Réponses: 9
    Dernier message: 28/04/2005, 23h17

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