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 :

Mapping tout simple mais pourtant


Sujet :

Hibernate Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Mapping tout simple mais pourtant
    Bonjour,

    Je débute avec hibernate, et même en lisant plusieurs tutoriaux et en parcourant le forum, je suis bloqué sur les mappings de relation manytoone.

    Histoire de comprendre une bonne fois pour toute, je voudrais juste réaliser quelque chose de tout simple :

    J'ai une table Famille :
    Famille.idFamille
    Famille.libelle

    une table SousFamille :
    SousFamille.idFamille
    SousFamille.libelle
    SousFamille.idFamille <--- clef etrangere


    Au niveau des fichiers de mapping je pense que je devrais avoir :

    Famille.hbm.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <hibernate-mapping>
      <class dynamic-insert="false" dynamic-update="false" mutable="true" name="BD.Famille" optimistic-lock="version" polymorphism="implicit" select-before-update="false" table="famille">
        <id column="IdFamille" name="IdFamille" type="integer">
          <generator class="native"/>
        </id>
        <property column="Libelle" name="Libelle" type="string"/>
        <many-to-one class="BD.Sousfamille" name="IdFamille"/>
       <set name="SousFamilles" inverse="true">
        <key column="IdFamille"/>
        <one-to-many class="BD.SousFamille"/>
    </set>
      </class>
    </hibernate-mapping>
    SousFamille.hbm.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <hibernate-mapping>
      <class dynamic-insert="false" dynamic-update="false" mutable="true" name="BD.Sousfamille" optimistic-lock="version" polymorphism="implicit" select-before-update="false" table="sousfamille">
        <id column="IdSousFamille" name="IdSousFamille" type="integer">
          <generator class="native"/>
        </id>
        <property column="Libelle" name="Libelle" type="string"/>
       <many-to-one name="IdFamille" column="IdFamille" not-null="true"/>
      </class>
    </hibernate-mapping>
    Tout d'abord est ce que ces fichiers de mapping semblent correct ?
    Ensuite dans mes deux classe java comment dois je représenter cette relation ?

    Tout ce que je désire, c'est lorsque je supprime une famille, les sousfamilles liées soient supprimées, et lorsque je recherche des sousfamilles, cela puisse etre en fonction d'une famille.

    Si quelqu'un peut me donner quelques conseils, merci beaucoup !

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2007
    Messages : 140
    Points : 170
    Points
    170
    Par défaut
    Bonjour,

    Lorsque tu fais un mapping many-to-one, tu met pas l'id de la sous classe mais plutôt la classe elle même.
    Je m'explique :

    Classe Famille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public Class Famille {
    private Integer idFamille;
    private String libelle;
    private Set<SousFamille> sousFamilleList = new HashSet<SousFamille>();
     
    // getter/setter sur les propriétés
    }
    Classe SousFamille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public Class SousFamille {
    private Integer idSousFamille;
    private String libelle;
    private Famille famille;
     
    // getter/setter sur les propriétés
    }
    ensuite pour le mapping :

    Famille.hbm.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <hibernate-mapping>
      <class name="Famille" table="FAMILLE">
        <id column="IDFAMILLE" name="idFamille" type="integer">
          <generator class="native"/>
        </id>
        <property column="LIBELLE" name="Libelle" type="string"/>
       <set name="sousFamilleList" table="SOUSFAMILLE" inverse="true">
        <key column="IDSOUSFAMILLE"/>
        <one-to-many class="SousFamille"/>
       </set>
      </class>
    </hibernate-mapping>
    SousFamille.hbm.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <hibernate-mapping>
      <class name="SousFamille" table="SOUSFAMILLE">
        <id column="IDSOUSFAMILLE" name="idSousFamille" type="integer">
          <generator class="native"/>
        </id>
        <property column="LIBELLE" name="Libelle" type="string"/>
       <many-to-one name="famille" column="FAMILLE" class="Famille"/>
      </class>
    </hibernate-mapping>
    Ceci te permettera d'avoir la liste des sous familles à partir d'une famille et inversement ...

    Un petit conseil également, essayes de mettre par exemple les noms des tables et colonnes de la BDD en majuscule par exemple, pour éviter les confusions entre BDD et classe JAVA et nom de propriété ..

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    bonjour,
    Merci pour cette réponse qui m'a pas mal aidé... cela a fonctionné à partir du moment où j'ai enlevé le manytoone dans la sousfamille... il me reste encore maintenant à vérifier si la suppression en cascade fonctionne.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2007
    Messages : 140
    Points : 170
    Points
    170
    Par défaut
    Pour celà il faut rajouté l'attribut cascade dans le mapping, plus exactement : cascade="save-update,delete" dans le mapping du set

    voiçi la doc Hibernate en Français ... tu trouveras dedant tout ce que tu veux savoir !!

    http://www.hibernate.org/hib_docs/v3/reference/fr/html/

Discussions similaires

  1. Recherche d'une regex toute simple (mais pas pour moi)
    Par rambc dans le forum Général Python
    Réponses: 7
    Dernier message: 15/04/2009, 15h23
  2. Programme tout simple mais sans fenetre
    Par pip1000 dans le forum Débuter
    Réponses: 6
    Dernier message: 10/02/2009, 20h02
  3. [RegEx] Preg_replace si simple mais pourtant
    Par DeZanGe dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2008, 15h49
  4. [MySQL] Problème tout simple mais résultat incompréhensible
    Par KaXz dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 25/02/2007, 00h48
  5. Petite fonction toute simple, mais
    Par renaud26 dans le forum Général JavaScript
    Réponses: 46
    Dernier message: 21/07/2006, 14h34

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