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
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 <?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>
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
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>
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 <?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>
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
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>
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.
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>
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.
Partager