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

Persistance des données Java Discussion :

Problème mapping ? Many-to-many


Sujet :

Persistance des données Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 94
    Par défaut Problème mapping ? Many-to-many
    Bonjour,

    J'ai lu pas mal de tutoriel sur internet mais aucun d'entre eux ne m'a apporté de solution. Peut - être ai je mal diagnostiqué le problème. Cependant, j'aimerai avoir votre point de vue.

    (NE faites pas attention à la logique j'ai changer le nom des tables

    J'ai trois tables: personne (n) <--> (n) personne_ville <--> (n) ville
    La table personne_ville contient juste la PK de personne et de ville.

    Ce qui est OK:
    - J'ai bien l'information sur les villes (j'obtiens bien la liste)
    - J'ai bien l'information sur les personnes (j'obtiens bien la liste)


    Ce qui ne va pas :
    - La liste des villes d'une personne ne se charge pas (j'ai été voir en mode debug, et la liste ville dans personne reste toujours vide)
    - La Liste des personnes d'une ville ne se charge pas (même problème)

    Conclusion: il doit y avoir un problème au chargement de la table qui fait le lien (mapping ou autres)
    Mapping hibernate:

    Extrait du mapping de la table personne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            <set name="villes" inverse="true" lazy="true" table="personne_ville" fetch="select">
                <key>
                    <column name="personne_id" length="3" not-null="true" />
                </key>
                <many-to-many entity-name="my.dao.model.refVille">
                    <column name="ville_id" length="5" not-null="true" />
                </many-to-many>
            </set>
    Extrait du mapping de la table ville

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            <set name="personnes" inverse="false" lazy="true" table="personne_ville" fetch="select">
                <key>
                    <column name="ville_id" length="3" not-null="true" />
                </key>
                <many-to-many entity-name="my.dao.model.refPersonne">
                    <column name="personne_id" length="5" not-null="true" />
                </many-to-many>
            </set>
    Et dans les classes refVille et refPersonne:
    private Set<refVille > villes
    private Set<refPersonne> personnes


    Solution que j'ai essayé de manière unique et mélanger aux autres:
    - mettre cascade="all"
    - remplacer entity-name par class
    - changer le inverse=false en true
    - rajouter des les classes = new HashSet<refVille >(0) et de refPersonne ainsi que dans le constructeur la liste propre pour chaque classe (il y a bien les setters / getters)

    Cependant, le lien entre mes tables ne s'instancie jamais...

    Je n'ai plus d'idée et plus de soluce google (d'ailleurs pour mon problème, chaque solution est différente, chose que je trouve étrange...surtout qu'aucune ne marche pour moi)

    Merci d'avance

  2. #2
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Par défaut
    Bonjour,

    Déjà il y a un soucis dans la déclaration des colonnes:
    Citation Envoyé par bruno_nono Voir le message
    Extrait du mapping de la table personne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (...)
    <column name="personne_id" length="3" not-null="true" />
    (...)
    Extrait du mapping de la table ville
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (...)
    <column name="personne_id" length="5" not-null="true" />
    (...)
    Alors 3 ou 5 de longueur ? Et d'ailleurs pourquoi les redéclarer (avec "length" et "not-null") dans ces parties du mapping ? Si ce sont des id elles doivent déjà exister dans leur mapping de classe respectif.


    Au passage, les noms de classe commencent ils vraiment par des minuscules ?
    Citation Envoyé par bruno_nono Voir le message
    Et dans les classes refVille et refPersonne:
    private Set<refVille > villes
    private Set<refPersonne> personnes

    Sinon mon conseil serait de consulter le paragraphe correspondant de la documentation Hibernate, d'appliquer exactement leur exemple (en adaptant uniquement le nom des tables, colonnes et classes) et une fois que ça fonctionne modifier éventuellement point par point (pour savoir à partir de quand ça ne marche plus) le mapping si le résultat obtenu n'est pas satisfaisant.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 94
    Par défaut
    Oui c'est juste une erreur de "recopiage"

    J'avaisregardé la doc hibernate .. je vais recommencer , j'ai peut être loupé une étape

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

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Comment essaies-tu de récupérer tes listes d'objets ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 94
    Par défaut
    Solution : Ok


    J'ai remplacé le mapping par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            <set name="villes" table="personne_ville" inverse="false" lazy="true" fetch="select">
                <key column="ville_id"/>
                <many-to-many column="personne_id"
                	class="my.dao.RefPersonne"/>
            </set>
     
            <set name="personnes" table="personne_ville" inverse="true" lazy="true" fetch="select">
                <key column="personne_id"/>
                <many-to-many column="ville_id"
                	class="my.dao.RefVille"/>
            </set>
    Merci à vous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Mapping] Problème de reverse hibernate many-to-many
    Par cypriendt dans le forum Hibernate
    Réponses: 10
    Dernier message: 13/06/2012, 11h59
  2. Problème avec une relation many-to-many
    Par jillthe1 dans le forum Doctrine2
    Réponses: 9
    Dernier message: 19/12/2011, 21h05
  3. Problème avec Composite-Id (mapping many-to-many))
    Par ammouna24 dans le forum Hibernate
    Réponses: 0
    Dernier message: 07/05/2009, 11h43
  4. Un peu de mal a comprendre le concepte "one-to-many" et "many-to-many"
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/03/2007, 18h50
  5. [hibernate 3] mapping many-to-many
    Par darkyspirit dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/12/2006, 19h37

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