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 :

Clefs composees +mapping 3 tables


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut Clefs composees +mapping 3 tables
    Bonjour,

    une question qui fait suite a mon dernier post
    je dispose d'actuellement trois tables (dans une base de donnees Oracle) dont je ne parviens a ecrire le mapping.
    Ce que je souhaite a faire est la representation des clefs primaires de ces tables

    TASQUES_DOCUMENTS ------ DOCUMENTS
    TTD_SYS ------------------------ TDO_SYS
    TDO_CODI-------------------- TDO_CODI
    TTQ_CODI


    TASQUES_DOCUMENTS --- TASQUES
    TTD_SYS ------------------ TTQ_SYS
    TDO_CODI
    TTQ_CODI ---------------- TTQ_CODI

    J'ai donc defini DOCUMENTS:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <hibernate-mapping package="net.gencat.uid.model.param.document">
       <class
          name="Document"
          table="UIDT_DOCUMENTS">
          <composite-id>
             <key-property name="dosys" column="TDO_SYS" />
             <key-property name="docodi" column="TDO_CODI" />
          </composite-id>
       </class>   
    </hibernate-mapping>

    puis TASQUES :

    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
    <hibernate-mapping package="net.gencat.uid.model.param.tasca">
       <class
          name="Tasca"
          table="UIDT_TASQUES">
          <composite-id>
             <key-property name="tqsys" column="TTQ_SYS" />
             <key-property name="tqcodi" column="TTQ_CODI" />
          </composite-id>
          <set name="tascaDocuments" inverse="true" lazy="true" order-by="TDO_CODI">
             <key>
                <column name="TTQ_CODI"/>
                <column name="TTQ_SYS"/>
             </key>
             <one-to-many class="net.gencat.uid.model.param.tasca.TascaDocument"/>
          </set>
       </class>   
    </hibernate-mapping>

    et enfin TASQUES_DOCUMENTS :

    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
    <hibernate-mapping package="net.gencat.uid.model.param.tasca" >
       <class
          name="TascaDocument"
          table="UIDT_TASQUES_DOCUMENTS">
          <composite-id name="id" class="TascaDocumentPK">
             <key-property name="tdsys" column="TTD_SYS"/>
             <key-many-to-one name="tasca"
                class="net.gencat.uid.model.param.tasca.Tasca">
                <column name="TTQ_SYS"/>
                <column name="TTQ_CODI"/>
             </key-many-to-one>
             <key-many-to-one name="document"
                class="net.gencat.uid.model.param.document.Document">
                <column name="TDO_SYS"/>
                <column name="TDO_CODI"/>
             </key-many-to-one>   
          </composite-id>
       </class>   
    </hibernate-mapping>

    Vous l'aurez certainement compris, c'est sur ce dernier que j'ai des soucis. Quand j'essaye d'acceder a travers mon set qui est dans Tasques cela me declenche une erreur de type SQLGrammarException. Certainement parce que ce mapping n'est pas bon.
    J'ai bien cree les classes associes, ainsi que celle qui contient la clef primaire de Tasques_Documents.
    La difficulte dans ce cas de figure est que la cle ttd_sys est utilisee comme etant une des clefs composees de la classe Tasca, mais aussi de classe Documents.

    Avez-vous une idee ? Avec les composants ?

  2. #2
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Pour voir si j'ai bien compris : En gros tu essaye de faire un many-to-many avec comme clé primaire 2 clés dont une est commune entre les 2 tables (tasques et documents)?

  3. #3
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    Ca pourrait ressembler a un many-to many effectivement, le seul truc c'est que ma table intermediaire (tasques_documents) contiendra d'autres donnees et du coup je ne suis pas sur que la many-to-many soit approprie.
    Enfin je crois. J'avoue etre assez "noob" sur Hibernate et du coup j'ai du mal a percevoir quel est la methode la plus appropriee a utiliser.

    Pour repondre a ta question, oui c'est grosso-modo ce que je veux faire.

  4. #4
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    En faite moi non plus je ne suis pas un veteran de Hibernate, mais j'aurais plutot fait un truc de ce style (ne pas tembeter avec des composites, faire un id pour un document et un task) et ne gérer que cette id (m'enfin si c'est faisable):

    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
    <hibernate-mapping package="net.gencat.uid.model.param.tasca" >
       <class
          name="TascaDocument"
          table="UIDT_TASQUES_DOCUMENTS">
          <id name="id" column="id"/>
          <many-to-one name="tasca"
                class="net.gencat.uid.model.param.tasca.Tasca">
                <column name="TTQ_SYS" column="TTD_SYS"/>
                <column name="TTQ_CODI"/>
          </many-to-one>
          <many-to-one name="document"
                class="net.gencat.uid.model.param.document.Document">
                <column name="TDO_SYS" column="TTD_SYS"/>
                <column name="TDO_CODI"/>
          </many-to-one>   
          </composite-id>
       </class>   
    </hibernate-mapping>
    J'ai fait ca un peu à l'arrache sur le site sans regarder s'il y avait des erreurs. C'était juste pour te donner des idées

  5. #5
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    Oui pourquoi pas.
    Mais je n'ai pas de champ id dans ma table alors je vois pas trop ce que tu veux dire ?!!
    Basiquement j'ai trois clefs primaires qui sont
    TTD_SYS, TDO_CODI et TTQ_CODI

    Et au moment de faire des insert, update ou delete si je n'ai pas defini ces clefs comme clefs composees ca risque de poser un probleme, non ?
    J'ajoute que je ne peux pas modifier la structure de la base de donnees, je dois faire avec sinon je devrais discuter pas mal de temps avec l'analyste fonctionnel

  6. #6
    Membre Expert Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Par défaut
    Ah ben dans ce cas alors oubli mon id et refait tes composites, lol!
    Pck je voulais te faire changer ta base, !

    donc essaye 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
    <hibernate-mapping package="net.gencat.uid.model.param.tasca" >
       <class
          name="TascaDocument"
          table="UIDT_TASQUES_DOCUMENTS">
          <composite-id>
                 <key-property name="TTD_SYS"/>
                 <key-property name="TTQ_CODI"/>
                 <key-property name="TDO_CODI"/>
          </composite-id>      
         <many-to-one name="tasca"
                class="net.gencat.uid.model.param.tasca.Tasca">
                <column name="TTQ_SYS" column="TTD_SYS"/>
                <column name="TTQ_CODI"/>
          </many-to-one>
          <many-to-one name="document"
                class="net.gencat.uid.model.param.document.Document">
                <column name="TDO_SYS" column="TTD_SYS"/>
                <column name="TDO_CODI"/>
          </many-to-one> 
       </class>   
    </hibernate-mapping>

  7. #7
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    <column name="TTQ_SYS" column="TTD_SYS"/>

    n'est pas accepte !

  8. #8
    Membre Expert Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Par défaut
    Et le probleme est le suivant :

    Comment dire que TTQ_SYS de TASQUES est relie TTD_SYS de TASQUES_DOCUMENTS ?

Discussions similaires

  1. [ADO] Mapping de table
    Par s.n.a.f.u dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 18/06/2007, 14h53
  2. Mapping classes - tables (outil)
    Par taroudant dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 22/05/2007, 17h09
  3. Probleme sur clef composee
    Par dridridri dans le forum Oracle
    Réponses: 4
    Dernier message: 01/11/2006, 11h59
  4. Comment comment définir une clef primaire dans une table??
    Par nek_kro_kvlt dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/02/2005, 21h06
  5. récupérer la clef primaire d'une table
    Par orionis69 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 28/02/2004, 13h00

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