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 :

[Hibernate 3] Relation many-to-one


Sujet :

Hibernate Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2005
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 513
    Par défaut [Hibernate 3] Relation many-to-one
    Bonsoir a tous,

    voila je me décide à poster un message car j'ai un problème avec Hibernate et je n'arrive pas à trouver ce qui ne va pas malgrès mes nombreuses recherche sur Internet et mes parcours de Forum (bien que j'ai trouvé des infos).

    En fait j'aimerais que vous m'aidier à trouver ce qui ne va pas. En fait tout simplement j'ai deux tables, une table REGION et une table DEPARTEMENT qui se compose 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
    CREATE TABLE tr_region(
      id_pk SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
      nom VARCHAR(50) NOT NULL,
      PRIMARY KEY(id_pk)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    CREATE TABLE tr_departement(
      id_pk VARCHAR(3) NOT NULL,
      nom VARCHAR(50) NOT NULL,
      region_id_fk SMALLINT UNSIGNED NOT NULL,
      PRIMARY KEY(id_pk),
      FOREIGN KEY(region_id_fk) REFERENCES tr_region(id_pk)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;
    J'ai ainsi créé les fichiers de mapping suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    departement.hbm.xml
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping
        PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping>
        <class name="com.xxx.domain.model.Departement" table="tr_departement" lazy="false">
            <id name="id" column="id_pk" />
            
            <property name="nom" column="nom" not-null="true" />
            <many-to-one name="region" column="region_id_fk" not-null="true" class="com.xxx.domain.model.Region" />
        </class>
    </hibernate-mapping>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    region.hbm.xml:
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping
        PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping>
        <class name="com.xxx.domain.model.Region" table="tr_region" lazy="false">
            <id name="id" column="id_pk" />
            
            <property name="nom" column="nom" not-null="true" />
        </class>
    </hibernate-mapping>
    les classes de mapping:
    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
    76
    77
    78
    79
     
    public class Departement implements Serializable, Comparable<Departement>
    {
        private static final long serialVersionUID = 562737487953277633L;
        private String id;
        private String nom;
        private Region region;
     
        public Departement()
        {
            id = null;
            nom = null;
            region = null;
        }
     
        public Departement(String id, String nom, Region region)
        {
            this.id = id;
            this.nom = nom;
            this.region = region;
        }
     
        public String getId()
        {
            return id;
        }
     
        public void setId(String id)
        {
            this.id = id;
        }
     
        public String getNom()
        {
            return nom;
        }
     
        public void setNom(String nom)
        {
            this.nom = nom;
        }
     
        public Region getRegion()
        {
            return region;
        }
     
        public void setRegion(Region region)
        {
            this.region = region;
        }
     
        @Override
        public boolean equals(Object o)
        {
            if(this == o)
                return true;
     
            if(!(o instanceof Departement))
                return false;
     
            final Departement dept = (Departement)o;
            if(!id.equals(dept.id))
                return false;
     
            return true;
        }
     
        @Override
        public int hashCode()
        {
            return id.hashCode();
        }
     
        public int compareTo(Departement that)
        {
            return this.getId().compareTo(that.getId());
        }
    }
    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
    public class Region implements Serializable, Comparable<Region>
    {
        private static final long serialVersionUID = -1420115862805756707L;
        private Long id;
        private String nom;
     
        public Region()
        {
            id = null;
            nom = null;
        }
     
        public Region(Long id, String nom)
        {
            this.id = id;
            this.nom = nom;
        }
     
        public Long getId()
        {
            return id;
        }
     
        public void setId(Long id)
        {
            this.id = id;
        }
     
        public String getNom()
        {
            return nom;
        }
     
        public void setNom(String nom)
        {
            this.nom = nom;
        }
     
        @Override
        public boolean equals(Object o)
     
     
        {
            if(this == o)
                return true;
     
            if(!(o instanceof Region))
                return false;
     
            final Region region = (Region)o;
            if(!id.equals(region.id))
                return false;
     
            return true;
        }
     
        @Override
        public int hashCode()
        {
            return id.hashCode();
        }
     
        public int compareTo(Region that)
        {
            return this.getId().compareTo(that.getId());
        }
    }
    et voila la requête que j'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    departements = session.createCriteria(Departement.class)
                                .addOrder(Order.asc("nom"))
                                .list();
    mais en fait cette requête ne me retourne aucun résultat bien que ma table contienne des données et je n'arrive vraiment pas à trouver d'où vient mon erreur!

    Pourriez-vous m'aider svp ?

    Merci par avance.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    Hello,

    Mauvaise nouvelle : Il semble que tes mappings et classes soient corrects.

    J'ai recopié ta config et le test suivant passe :
    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
     
    Session s = sessionFactory.getCurrentSession();
     
    Region r = new Region();
    r.setId(1L);
    r.setNom("r");
     
    s.saveOrUpdate(r);
     
    Departement d = new Departement();
    d.setId("d");
    d.setNom("d");
    d.setRegion(r);
     
    s.saveOrUpdate(d);
     
    d = new Departement();
    d.setId("d2");
    d.setNom("d2");
    d.setRegion(r);
     
    s.saveOrUpdate(d);
     
    List<?> l = s.createCriteria(Departement.class)
    .addOrder(Order.asc("nom"))
    .list();
     
    assertTrue(l.size() == 2);
    Es-tu bien sûr d'être connecté à la bonne DB (celle ou il y a des données) ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2005
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 513
    Par défaut
    Dans un certain sens je suis un peur rassuré de savoir que mes mappings sont corrects (surtout qu'il s'agit d'un mapping tout bête)!

    Bah oui je suis connecté à la bonne base car en fait si je cherche à récupéré l'ensemble des Region présentes en base, je les retrouve bien!

    Mon problème vient donc d'ailleur, je vais regarder ailleurs maintenant que je suis sur que mes mapping sont correct!

    Merci en tout cas d'avoir essayé, même si nous n'avons pas la solution au problème, j'ai au moins fait un pas de plus!

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 298
    Par défaut
    il ressemble à quoi ton fichier hibernate.cfg.xml ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    En fait je suis avec Spring+Hibernate -> la config se fait un fichier Spring. Mais tu devrais t'y retrouver facilement :

    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
     
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    	<property name="dataSource" ref="dataSource"/>
    	<property name="mappingResources">
    		<list>
    			<value>com/mickinat/share4u/test/departement.hbm.xml</value>
    			<value>com/mickinat/share4u/test/region.hbm.xml</value>
    		</list>
    	</property>
    	<property name="hibernateProperties">
       	<props>
           	<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
           	<prop key="hibernate.show_sql">true</prop>
           	<prop key="hibernate.hbm2ddl.auto">update</prop>
           </props>
    	</property>
    </bean>

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 298
    Par défaut
    1. Le sql généré par ta criteria est correct ?
    2. Tes données de département sont bien dans ta base hsqldb ? Un "select * from tr_departement" te retourne des enregistrements ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Hibernate: insert into tr_region (nom, id_pk) values (?, ?)
    Hibernate: insert into tr_departement (nom, region_id_fk, id_pk) values (?, ?, ?)
    Hibernate: insert into tr_departement (nom, region_id_fk, id_pk) values (?, ?, ?)
    Hibernate: select this_.id_pk as id1_1_1_, this_.nom as nom1_1_, this_.region_id_fk as region3_1_1_, region2_.id_pk as id1_2_0_, region2_.nom as nom2_0_ from tr_departement this_ inner join tr_region region2_ on this_.region_id_fk=region2_.id_pk order by this_.nom asc
    On dirait bien.

    Si je commit mes tables sont remplies.

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 298
    Par défaut
    tu as un inner join entre region et departement dans ton sql. donc il ne remonte que les département qui sont lié à une région. Tu en as ?

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    Oui, si tu relis le test, tu verras que mes départements d et d1 sont liés à la région r.

  10. #10
    Membre éclairé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 298
    Par défaut
    Citation Envoyé par mickilous Voir le message
    Oui, si tu relis le test, tu verras que mes départements d et d1 sont liés à la région r.
    Comment ça si je relis tes tests ?
    Je ne comprend plus rien. C'est mickilous ou LordBob qui a un problème ?

    J'avais pas fais attention que c'était mickilous qui m'avait filé sa config et pas LordBob.

    On essaye de régler le pb de qui ? Je suis un peu paumè là !

  11. #11
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2005
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 513
    Par défaut
    Bonsoir,
    alors à la base on tente de résoudre mon problème à moi (LordBob)
    Seulement je ne peux me connecter que le soir et donc je n'ai pas pu répondre aux différents post de la journée.

    Visiblement après vous avez chacun essayer de m'aider seulement après vous vous être posé mutuellement des questions alors que je pense que tout marche correctement pour chacun d'entre vous, mais croyant que c'était moi qui posait la question vous avez essayer de m'aider.

    Sinon ce soir, j'ai réussi à faire fonctionner mon mapping! Mon erreur? j'ai trop honte de la dire, le problème venait de mon fichier de config Hibernate qui avait la ligne d'insertion du fichier Departement.hbm.xml qui était commenté!!! Effectivement difficile de marché dans ce cas la.

    Faudrais que je pense à me reposé des fois car là cela devient grave!

    En tout cas merci pour votre aide! et désolé pour le dérangement!

  12. #12
    Membre éclairé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 298
    Par défaut
    Citation Envoyé par LordBob Voir le message
    Bonsoir,
    Sinon ce soir, j'ai réussi à faire fonctionner mon mapping! Mon erreur? j'ai trop honte de la dire, le problème venait de mon fichier de config Hibernate qui avait la ligne d'insertion du fichier Departement.hbm.xml qui était commenté!!! Effectivement difficile de marché dans ce cas la.
    D'où mon premier post te demandant de poster ton fichier hibernate.cfg.xml.
    Je te rassures, ça nous arrive à tous ce genre de bourde

  13. #13
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2005
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 513
    Par défaut
    j'ai le droit de ne pas être rassuré malgrès tout ?!

    en tout cas ta réponse aura eu le mérite de me faire vérifier ma config Hibernate auquel je n'avais pas pensé!

    Je crois qu'une erreur comme cela, n'est pas prête de se reproduire!

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Par défaut
    Effectivement, il a eu une petite confusion entre les intervenants

    Content que ton problème soit résolu en tout cas... bonne continuation.

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

Discussions similaires

  1. [Spring / Hibernate / JPA] Relation Many to One
    Par Yoru17 dans le forum Hibernate
    Réponses: 0
    Dernier message: 25/06/2015, 11h35
  2. Hibernate relation many-to-one
    Par bricecol dans le forum Hibernate
    Réponses: 4
    Dernier message: 09/03/2011, 09h57
  3. hibernate 3 et relation many-to-one
    Par the_frogkiller dans le forum Hibernate
    Réponses: 1
    Dernier message: 01/05/2009, 13h35
  4. [Hibernate]POJO et many-to-one
    Par azpublic dans le forum Hibernate
    Réponses: 3
    Dernier message: 13/07/2006, 15h00
  5. Hibernate : suppression sur relation many to one
    Par taf dans le forum Hibernate
    Réponses: 1
    Dernier message: 23/05/2006, 13h08

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