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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 ?

+ 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