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 :

[Mapping clé complexe]


Sujet :

Hibernate Java

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Par défaut [Mapping clé complexe]
    Salut,

    J'ai une base de données qui gère un championnat de foot et son historique.
    Voir le schema en pièce jointe.
    - 1 league possede 8 positions par journées et une saison
    - 1 position concerne 1 équipe pour une journée et une saison

    Je cherche a créer le mapping adéquat Hibernate.
    A l'heure actuelle, je genere la classe league et position a partir de la base de donnée. J'utilise Hibernate synchronizer sous eclipse.

    malheureusement je ne trouve pas d'exmple avec des colonnes multiples.
    Comment faire ?

    Merci de votre aide
    Images attachées Images attachées  

  2. #2
    Membre Expert
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Par défaut
    Salut, tu peux jeter un oeil du côté de composite-id : http://www.hibernate.org/hib_docs/v3...on-compositeid

    Bon développement

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Par défaut
    serait il possible d'avoir une petite illustration avec league et position ???

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Par défaut
    Bon j'ai simplifié mon schema BDD (piece-jointe)

    le lie la league avec des positions de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		<list name="positions" table="position">
    			<key column="country" />
    			<key column="series_id" />
    			<key column="division_id" />
    			<one-to-many class="xxx.Position" />
    		</list>
    Mon fichier position.hbm est declaré comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    		<composite-id>
    			<key-many-to-one name="league" class="League">
        			<column name="country"/>
        			<column name="series_id"/>
        			<column name="division_id"/>
    			</key-many-to-one>
    			<key-property
    				name="TeamId"
    				column="team_id"
    				type="java.lang.Double"
    			/>
    		</composite-id>
    En mode debug, ma classe league contient une liste de postions qui est peuplé de 2 positions. Au moment de l'insertion en BDD l'erreur suivante apparait :
    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
    Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from resource xxx/League.xml
    	at org.hibernate.cfg.Configuration.addResource(Configuration.java:575)
    	at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1593)
    	at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1561)
    	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1540)
    	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1514)
    	at org.hibernate.cfg.Configuration.configure(Configuration.java:1434)
    	at org.hibernate.cfg.Configuration.configure(Configuration.java:1420)
    	at org.yll.pippo.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:17)
    	... 1 more
    Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from invalid mapping
    	at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:508)
    	at org.hibernate.cfg.Configuration.addResource(Configuration.java:572)
    	... 8 more
    Caused by: org.xml.sax.SAXParseException: The content of element type "list" must match "(meta*,subselect?,cache?,synchronize*,comment?,key,(index|list-index),(element|one-to-many|many-to-many|composite-element|many-to-any),loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,filter*)".
    	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleEndElement(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endElement(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    	at org.dom4j.io.SAXReader.read(SAXReader.java:465)
    	at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:505)
    	... 9 more
    je ne suis plus tres loin mais je reste bloqué...
    Images attachées Images attachées  

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Par défaut
    je ne trouve pas le mapping qui correspond à mes besoins.
    la syntaxe que j'ai utilisé n'est pas accepté et validé par le mapping.dtd
    Aucun exemple n'illustre mon problème, tous se limite à des cas très simples

    Si quelqu'un pouvait me filer un coup de main ou me donner un bon lien...
    Je cherche depuis une semaine et je commence a ne plus avoir d'idées

    merci d'avance.

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Par défaut
    juste un pti up dans l'espoir de trouver un peu d'aide,
    ou du moins une piste...

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Par défaut
    Sujet posté il y a 15 jours et pas une personne n'est capable de m'aider...
    C'est plus que décourageant

    J'ai étudié pas mal de lien sur le net mais tous reste plus que basique.
    A defaut d'avoir la solution entière, des pistes ou explications...
    je prend tout

    merci d'avance !!!

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Par défaut
    Ej travaillant sur le premier schema voici mes config xml :

    league
    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
    ... <composite-id name="id" class="LeaguePK">
    			<key-property name="season" 	column="season" 		type="java.lang.Double" />
    			<key-property name="countryId" 	column="country_id" 	type="java.lang.Double" />
    			<key-property name="seriesId" 	column="series_id" 		type="java.lang.Double" />
    			<key-property name="divisionId" column="division_id" 	type="java.lang.Double" />
    		</composite-id>
     
    		<list name="positions">
    			<key column="season" not-null="true" />
    			<key column="country_id" not-null="true" />
    			<key column="series_id" not-null="true" />
    			<key column="division_id" not-null="true" />
    			<!-- <key column="id" not-null="true" /> -->
    			<list-index column="pos"/>
    			<one-to-many class="org.yll.pippo.hibernate.Position" />
    		</list> ...
    position
    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
    ...		<composite-id name="id" class="PositionPK">
    			<!--
    			<key-many-to-one name="league" 		column="id" 			class="org.yll.pippo.hibernate.League" />
    			-->
    			<key-many-to-one name="seriesId" 	column="series_id" 		class="org.yll.pippo.hibernate.League" />
    			<key-many-to-one name="divisionId" 	column="division_id" 	class="org.yll.pippo.hibernate.League" />
    			<key-many-to-one name="countryId" 	column="country_id" 	class="org.yll.pippo.hibernate.League" />
    			<key-many-to-one name="season" 		column="season" 		class="org.yll.pippo.hibernate.League" />
     
     
    			<key-property name="pos" 	column="pos" 	type="java.lang.Double" />
    			<key-property name="round" 	column="round" 	type="java.lang.Double" />
     
    		</composite-id>
     
    		<many-to-one name="league" class="org.yll.pippo.hibernate.League" column="id" not-null="true" />...
    Cela m'entraine l'erreur :
    The content of element type "list" must match "(meta*,subselect?,cache?,synchronize*,comment?,key,(index|list-index),(element|one-to-many|many-to-many|composite-element|many-to-any),loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,filter*)".
    le bloc <list ... /> n'accepte qu'une balise <key /> ...

    or ma cle est composé, je ne sais pas comment faire ...

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Par défaut
    je corrige un peu la config de league comme ceci
    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
    <composite-id name="id" class="LeaguePK">
    			<key-property name="season" 	column="season" 		type="java.lang.Double" />
    			<key-property name="countryId" 	column="country_id" 	type="java.lang.Double" />
    			<key-property name="seriesId" 	column="series_id" 		type="java.lang.Double" />
    			<key-property name="divisionId" column="division_id" 	type="java.lang.Double" />
    		</composite-id>
     
    		<list name="positions">
    			<key>
    				<column name="season"/>
    				<column name="country_id"/>
    				<column name="series_id"/>
    				<column name="division_id"/>
    			</key>
     
    			<!--
    			<key column="id" not-null="true" />
    			-->
    			<list-index column="pos"/>
    			<one-to-many class="org.yll.pippo.hibernate.Position" />
    		</list>
    et position comme ceci
    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
    <composite-id name="id" class="PositionPK">
     
    			<key-many-to-one name="league" 		column="id" 			class="org.yll.pippo.hibernate.League" />
     
    			<!--
    			<key-many-to-one name="seriesId" 	column="series_id" 		class="org.yll.pippo.hibernate.League" />
    			<key-many-to-one name="divisionId" 	column="division_id" 	class="org.yll.pippo.hibernate.League" />
    			<key-many-to-one name="countryId" 	column="country_id" 	class="org.yll.pippo.hibernate.League" />
    			<key-many-to-one name="season" 		column="season" 		class="org.yll.pippo.hibernate.League" />
    			-->
     
    			<key-property name="pos" 	column="pos" 	type="java.lang.Double" />
    			<key-property name="round" 	column="round" 	type="java.lang.Double" />
     
    		</composite-id>
     
    		<many-to-one name="league" class="org.yll.pippo.hibernate.League" column="id" not-null="true" />
    et j'obtiens l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Exception in thread "main" java.lang.ExceptionInInitializerError
    	at org.yll.pippo.test.Test.main(Test.java:69)
    Caused by: java.lang.RuntimeException: Problème de configuration : Foreign key (FK2C92992974D848BD:position [id])) must have same number of columns as the referenced primary key (league [season,country_id,series_id,division_id])
    	at org.yll.pippo.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:19)
    	... 1 more
    Caused by: org.hibernate.MappingException: Foreign key (FK2C92992974D848BD:position [id])) must have same number of columns as the referenced primary key (league [season,country_id,series_id,division_id])
    	at org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:90)
    	at org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:73)
    	at org.hibernate.cfg.Configuration.secondPassCompileForeignKeys(Configuration.java:1269)
    	at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1176)
    	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1292)
    	at org.yll.pippo.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:17)
    	... 1 more

  10. #10
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Par défaut
    Apparemment 7 posts sur mon propre sujet ne sont pas assez pour avoir des pistes. Dites moi si certains points ne sont pas assez clairs svp, je me ferais un plaisir d'éclaircir tout ça...

    Y a t il des balises inutiles pour mon besoin, ........ ???

  11. #11
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Par défaut
    définition de league
    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
    <composite-id name="id" class="LeaguePK">
    			<key-property name="season" 	column="season" 		type="java.lang.Double" />
    			<key-property name="countryId" 	column="country_id" 	type="java.lang.Double" />
    			<key-property name="seriesId" 	column="series_id" 		type="java.lang.Double" />
    			<key-property name="divisionId" column="division_id" 	type="java.lang.Double" />
    		</composite-id>
     
    		<list name="positions">
    			<key>
    				<column name="season"/>
    				<column name="country_id"/>
    				<column name="series_id"/>
    				<column name="division_id"/>
    			</key>
    			<list-index column="pos"/>
    			<one-to-many class="org.yll.pippo.hibernate.Position"  >
    				<column name="series_id" 	/>
    				<column name="division_id" 	/>
    				<column name="country_id" 	/>
    				<column name="season" 		/>
    			</one-to-many>
    		</list>
    et position
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <composite-id name="id" class="PositionPK">
    			<key-many-to-one name="league" class="org.yll.pippo.hibernate.League" />
    			<key-property name="pos" 	column="pos" 	type="java.lang.Double" />
    			<key-property name="round" 	column="round" 	type="java.lang.Double" />
    		</composite-id>
    voici l'erreur java :
    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
    [ERROR] XMLHelper$ErrorLogger.error (61) - Error parsing XML: XML InputStream(31) The content of element type "one-to-many" must match "EMPTY".
    Exception in thread "main" java.lang.ExceptionInInitializerError
    	at org.yll.pippo.test.Test.main(Test.java:67)
    Caused by: java.lang.RuntimeException: Problème de configuration : Could not parse mapping document from resource League.hbm.xml
    	at org.yll.pippo.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:19)
    	... 1 more
    Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from resource League.hbm.xml
    	at org.hibernate.cfg.Configuration.addResource(Configuration.java:575)
    	at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1593)
    	at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1561)
    	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1540)
    	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1514)
    	at org.hibernate.cfg.Configuration.configure(Configuration.java:1434)
    	at org.hibernate.cfg.Configuration.configure(Configuration.java:1420)
    	at org.yll.pippo.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:17)
    	... 1 more
    Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from invalid mapping
    	at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:508)
    	at org.hibernate.cfg.Configuration.addResource(Configuration.java:572)
    	... 8 more
    Caused by: org.xml.sax.SAXParseException: The content of element type "one-to-many" must match "EMPTY".
    	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleEndElement(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endElement(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    	at org.dom4j.io.SAXReader.read(SAXReader.java:465)
    	at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:505)
    	... 9 more
    Donc oui ça ne marche toujours pas,
    j'envoie une fusée de détresse ou la cote est proche ???

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Par défaut
    Serait-il possible d'avoir un schema de ta base de données ? juste avec league et position

    Car ta relation one-to-many me parait bizarre !

  13. #13
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Par défaut
    Oki,
    petite explication :

    une division est identifié :
    • division_id : le niveau de la ligue
    • country_id : le pays
    • series_id : la serie dans le niveau
    • season : l'année


    Une division contient 8 position car constitué de 8 equipes,
    d'ou la liste de position.
    • division_id : le niveau de la ligue
    • country_id : le pays
    • series_id : la serie dans le niveau
    • season : l'année
    • round : la journée de championnat
    • pos : la position
    Images attachées Images attachées  

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Par défaut
    En fait je voulais voir le shema surtout pour les relation entre tables voir !

    Et notamment les foreigns keys. Généralement une foreign-key ce fait vers un attribut unique.

  15. #15
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Par défaut
    je ne comprends pas ...

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Par défaut
    Une association un vers plusieurs lie les tables de deux classes directement, sans table de collection
    intermédiaire (Ceci implémente un modèle relationnel un-vers-plusieurs).

    Une association de Foo vers Bar nécessite l'ajout d'une colonne clé et si possible d'une colonne index vers la
    table de la classe entité contenue, Bar. Ces colonnes sont mappées en utilisant les éléments <key> et <index>
    décrits précédemment.
    Le tag <one-to-many> indique une assocation un vers plusieurs.
    <one-to-many class="NomDeClasse"/>
    (1) class (requis) : Le nom de la classe associée.
    Exemple :
    <set name="bars">
    <key column="foo_id"/>
    <one-to-many class="org.hibernate.Bar"/>
    </set>
    Dans ton mapping tu as ca :

    <key>
    <column name="season"/>
    <column name="country_id"/>
    <column name="series_id"/>
    <column name="division_id"/>
    </key>
    <list-index column="pos"/>
    <one-to-many class="org.yll.pippo.hibernate.Position" >
    <column name="series_id" />
    <column name="division_id" />
    <column name="country_id" />
    <column name="season" />
    </one-to-many>
    Lors que tu lie deux tables entre elles tu les lies sur une colonne, la tu tente de le faire sur plusieures en même tps. Je voulais voir ta base de données afin de voir sur quelles colonnes tu fesait tes liasions car ton problème me semble bizarre.

  17. #17
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Par défaut
    Ok,
    en fait je n'ai pas vraiment le choix pour le choix des clefs, ça m'est dicté

    Ensuite pour identifier une ligue, je dois utiliser 4 attributs différents.
    Ceci m'oblige ensuite a ajouter ces 4 attributs au niveau de la clef de position. (Relation 1->n, une position n'appartient qu'a une league.)
    Pour conserver l'historique des positions j'ajoute round qui correspond à la journée ainsi que la saison.

    Tu penses que ce mapping n'est pas possible ???

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Par défaut
    Sans relation le mapping de league serait un truc comme ca :

    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
    <class 
        name="model.League" 
        table="league"
    >
     
        <composite-id name="comp_id" class="model.LeaguePK">
                <key-property 
                name="divisionId" 
                column="division-id" 
    			type="java.lang.Double"
    		/> 
    	        <key-property 
                name="country" 
                column="country" 
    			type="java.lang.Double"
    		/> 
    	        <key-property 
                name="seriesId" 
                column="series_id" 
    			type="java.lang.Double"
    		/> 
    	        <key-property 
                name="season" 
                column="season" 
    			type="java.lang.Double"
    		/> 
    		</composite-id>
     
         <property
            name="leagueName"
            type="java.lang.Double"
            column="league_name"
    		 />
         <property
            name="teamsPromoted"
            type="java.lang.Double"
            column="teams_promoted"
    		 />
         <property
            name="teamsRelegated"
            type="java.lang.Double"
            column="teams_relegated"
    		 />
    </class>
    </hibernate-mapping>
    Pour position :

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    <class 
        name="model.Position" 
        table="position"
    >
     
        <composite-id name="comp_id" class="model.PositionPK">
                <key-property 
                name="divId" 
                column="div_id" 
    			type="java.lang.Double"
    		/> 
    	        <key-property 
                name="countryId" 
                column="country_id" 
    			type="java.lang.Double"
    		/> 
    	        <key-property 
                name="journey" 
                column="journey" 
    			type="java.lang.Double"
    		/> 
    	        <key-property 
                name="season" 
                column="season" 
    			type="java.lang.Double"
    		/> 
    	        <key-property 
                name="pos" 
                column="pos" 
    			type="java.lang.Double"
    		/> 
    	        <key-property 
                name="teamId" 
                column="team_id" 
    			type="java.lang.Double"
    		/> 
    		</composite-id>
     
         <property
            name="points"
            type="java.lang.Double"
            column="points"
    		 />
         <property
            name="wins"
            type="java.lang.Double"
            column="wins"
    		 />
         <property
            name="draws"
            type="java.lang.Double"
            column="draws"
    		 />
         <property
            name="defeats"
            type="java.lang.Double"
            column="defeats"
    		 />
         <property
            name="sgoals"
            type="java.lang.Double"
            column="sgoals"
    		 />
         <property
            name="cgolas"
            type="java.lang.Double"
            column="cgolas"
    		 />
     
    </class>
    </hibernate-mapping>
    Maintenant dans ces mapping il y a aucune relation entre les deux tables. Le but du jeu est de faire un 1-->*. Et les mappings ne représente qu'un exemple

    Logiquement dans ta table qui est du coté 1, tu devrais avoir un clé étrangère qui référence l'autre table. Toi c'est une position --> une league donc dans ligue tu devrait avoir une clé etrangere qui pointe sur la position associé. Et c'est sur ca que tu mettra le one-to-many.

    J'espere que ce que j'ai ecris est lisible

  19. #19
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Par défaut
    Je ne comprends pas, dans la doc hibernate il parle bien d'association avec clé composé...

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 15
    Par défaut
    Si ca peut t'aider voici mon mapping entre deux tables liés par les foreign keys.
    (les foreigns key servent a lier les tables entre elles.)

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    	"-//Hibernate/Hibernate Mapping DTD//EN"
    	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
     
    <hibernate-mapping package="metier">
    	<class
    		name="Destination"
    		table="destination"
    	>
    		<meta attribute="sync-DAO">false</meta>
    		<id
    			name="Id"
    			type="big_decimal"
    			column="id"
    		>
    			<generator class="native"/>
    		</id>
     
    		<property
    			name="CodeDiscriminant"
    			column="code_discriminant"
    			type="string"
    			not-null="true"
    			length="30"
    		/>
    		<property
    			name="Numero"
    			column="numero"
    			type="string"
    			not-null="true"
    			length="50"
    		/>
    		<property
    			name="Zonegeo"
    			column="zonegeo"
    			type="integer"
    			not-null="false"
    		/>
    		<property
    			name="Station"
    			column="station"
    			type="integer"
    			not-null="false"
    		/>
    		<many-to-one
    			name="Produitto"
    			column="produitto"
    			class="Produitto"
    			not-null="false"
    		>
    		</many-to-one>
    		<property
    			name="Ville"
    			column="ville"
    			type="integer"
    			not-null="false"
    		/>
    		<many-to-one
    			name="Pays"
    			column="pays"
    			class="Pays"
    			not-null="false"
    		>
    		</many-to-one>
    		<property
    			name="Regiongeo"
    			column="regiongeo"
    			type="integer"
    			not-null="false"
    		/>
     
     
    	</class>
    </hibernate-mapping>
    Les foreign keys sont decrite par le propriété <many-to-one></many-to-one>.
    Donc dans le mapping de ma table Destination tu peux voir qu'il y a deux foreign key.

    Cette table pointe donc vers une table Pays et une table Produitto.

    Voila , j'espere avoir été assez clair.

    ++

Discussions similaires

  1. Réponses: 14
    Dernier message: 23/02/2012, 08h11
  2. Maps : calcul d'itinéraires complexes
    Par Nemon dans le forum Services Web
    Réponses: 0
    Dernier message: 24/11/2010, 19h59
  3. Mapping de map un peu complexe
    Par hpavavar dans le forum Hibernate
    Réponses: 13
    Dernier message: 11/08/2008, 11h32
  4. Mapping complexe de clases
    Par mauroyb0 dans le forum Hibernate
    Réponses: 1
    Dernier message: 24/03/2008, 18h21
  5. [EJB & WS] Problème Mapping Types complexes
    Par Mehdibr dans le forum Services Web
    Réponses: 3
    Dernier message: 04/07/2007, 14h40

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