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


Sujet :

Hibernate Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 60
    Points : 25
    Points
    25
    Par défaut Problème de mapping
    Bonjour,

    Voilà, si on a 2 classes : par exemple Bibliotheque et employes.

    Nous sommes bien d'accord qu'un employé peut appartenir à 1 et une seule bibliotheque mais qu'une bibliotheque possède plusieurs employés.

    Je ne sais pas trop comment le mapper ni comment le mettre en base.

    Voici ce que je pense mais qui ne fonctionne pas :

    <hibernate-mapping package="com.test">
    <class name="Bibliotheque" table="Bibliotheque">
    <id name="identifiant" column="ID_BIBLI">
    <generator class="increment"/>
    </id>
    <property name="nom" column="Nom" />


    <!-- Champ de type Employe-->
    <set name="employes" table="bibliotheque_employes" lazy="false">
    <key column="ID_BIBLI"/>
    <many-to-many class="employes" column="ID_EMP" outer-join="true"/>
    </set>
    </class>


    Et mon mapping de Employes n'a rien d'exceptionnel.

    Mais pour ma collection d'employes est-ce que je dois faire une classe : bibliotheque_employes correspondant à cette table ?

    D'ailleurs est ce que je dois faire cette table ?

    Merci.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 60
    Points : 25
    Points
    25
    Par défaut
    Ma question est-elle assez explicite ?

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Je mettrais un one-to-many dans ton mapping Bibliotheque vers Employe et
    un many-to-one dans Employe vers Bibliotheque.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 60
    Points : 25
    Points
    25
    Par défaut
    Ok, donc mais, je ne vois pas trop dans quel cas on met un many-to-many alors.

    Par contre, ton one-to-many ramène une collection ???

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Le many-to-many s'utilise pour une relation n <-> n, ce qui n'est pas ton cas.
    Toi tu as une relation n <-> 1.
    Donc un one-to-many te convient et il te ramène bien une collection.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 60
    Points : 25
    Points
    25
    Par défaut
    Merci, je vais essayer ça.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 60
    Points : 25
    Points
    25
    Par défaut
    Je comprends le mapping !!!! Mais, j'ai un autre souci avec la base en faite.

    Je reprends l'exemple de la bibliotheque et des l'employé.

    Déjà en base, je suis obligé d'avoir une table "d'association" entre bibliotheque et employé.

    Est-ce que cette table d'association doit donner lieu à une classe JAVA ?

    Dans mon mapping de bibliotheque je fais ça :

    <set name="employes" inverse="true" lazy="true">
    <key column="?????"/>
    <one-to-many class="Employe"/>
    </set>

    Je mets quoi dans key column ????

  8. #8
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Y a quoi dans ta table d'association ?
    Car si tu en as besoin, tu as peut être besoin d'un many-to-many.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 60
    Points : 25
    Points
    25
    Par défaut
    Dans ma table d'association il y a l'identifiant de la bibliotheque et l'identifiant de l'employe.

    Je l'ai mise pour le 1,n entre bibliotheque et employes.

  10. #10
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Si tu veux une relation 1 <-> n, un one-to-many suffit.
    Si tu veux une n <-> n, il te faut un many-to-many.
    Tout dépend de ce que tu veux exactement.

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 60
    Points : 25
    Points
    25
    Par défaut
    J'ai une relation 1<-> n.

    Je pense que je ne vais pas passer par une table d'association, je vais simplement rajouter dans la table employés l'identifiant de la bibliotheque et je vais faire mon one-to-many de bibliotheque jusqu'a employés.

    Je pense que c'est la seule solution qui fonctionne.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 60
    Points : 25
    Points
    25
    Par défaut
    A moins que pour avoir directement la collection d'employés dans la table bibliotheque, je peux peut-être faire un mapping avec une requête ?

  13. #13
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Je t'ai déjà dit ce que tu devais faire.

    Je mettrais un one-to-many dans ton mapping Bibliotheque vers Employe et
    un many-to-one dans Employe vers Bibliotheque.
    Et tu oublies ta table d'asscociation.
    Comme ça tu as une relation bidirectionnelle, qui te permet pour chaque Bibliothèque, de récupérer la liste de ses Employés, et pour chaque Employé
    de récupérer la Bibliothèque pour laquelle il travaille.

  14. #14
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 60
    Points : 25
    Points
    25
    Par défaut
    Je suis d'accord avec ça.

    Mais en base tu fais comment ? Dans la table Bibliotheque est-ce que tu mets un identifiant d'employés ? Et là, il y aura un problème avec la cardinalité n.

    Le truc c'est que je n'arrive pas à voir comment on peut récupérer une collection (dans l'exemple d'employés) sans avoir une table d'association.

  15. #15
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Dans ta base, dans ta table Employé, tu auras l'id de ta table Bibliotheque.
    Et c'est tout.

  16. #16
    Candidat au Club
    Inscrit en
    Décembre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    dans ta table employés tu auras comme attribut l'id de la bibliothèque
    il est considéré comme clé étrangère.

    donc par exemple
    table : employés
    attributs : nom, prénom, ... , idBibli

    enfin bon, c'est exactement ce qu'à dit fr1man.... donc je ne fais que confirmer
    +1 koi

Discussions similaires

  1. [IBATIS/mysql] problème de mapping
    Par iftolotfi dans le forum Persistance des données
    Réponses: 3
    Dernier message: 07/07/2006, 10h40
  2. [Débutant] Problème de mapping des ports
    Par zehle dans le forum VHDL
    Réponses: 1
    Dernier message: 22/05/2006, 22h37
  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