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 :

Mapper table d'association many-to-many


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 328
    Par défaut Mapper table d'association many-to-many
    Bonjour,
    Mapper une table d'association many-to-many contenant 3 autres atributs3.
    les 3 tables sont :

    * absence ( code_a pk,libelle string)
    * personnel(code_p pk,nom string,prenom string)
    *absence_personnel
    ( ( code_a,code_p) pk, date_absence Date, duree int,motif sring)

    absence.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
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    <?xml version="1.0" encoding='UTF-8'?>
    <!DOCTYPE hibernate-mapping PUBLIC
              "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     
    <hibernate-mapping package="com.gh.model">
     <class name="Absence" table="absence">
       <id name="code_a" column="CODE_A" type="java.lang.Integer">
            <generator class="native"/>
       </id>
     <property name="libelle" column="LIBELLE" type="java.lang.String"/>
     
     <set name="absences" table="absence_personnel">
               <key column="CODE_A" />
               <many-to-many column="MATRICULE_P" class="Personnel"/>
        </set>
     
      </class>
    </hibernate-mapping>
    de meme pr personnel.hbm.xml
    on a du mal a mapper la table d'association absence_personnel car elle contient des attributs propres a elle

    Merci d'avance.

  2. #2
    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
    Tu peux utiliser deux one-to-many.
    Ta classe d'association sera une classe à part entière avec ses attributs.

    Le many-to-one s'utilise quand on a pas besoin d'attributs supplémentaires dans la classe d'association.

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 328
    Par défaut
    je comprends tjrs pas

  4. #4
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    Citation Envoyé par zaineb.z
    les 3 tables sont :

    * absence ( code_a pk,libelle string)
    * personnel(code_p pk,nom string,prenom string)
    *absence_personnel
    ( ( code_a,code_p) pk, date_absence Date, duree int,motif sring)
    Bonjour,

    la table absence me semble plus une table de code/libelle qu'une table d'absence.

    l'idee est que l'on a :

    Personnel <--- "many-to-one" ---> Absence
    CodeAbsence <--- "many-to-one" ---> Absence

    ce qui donnerai en gros
    personnel.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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?xml version="1.0" encoding='UTF-8'?>
    <!DOCTYPE hibernate-mapping PUBLIC
              "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     
    <hibernate-mapping package="com.gh.model">
     <class name="Personnel" table="personnel">
       <id name="matricule" column="MATRICULE_P" type="java.lang.String">
            <generator class="native"/>
       </id>
     	<property name="nom" column="NOM" type="java.lang.String"/>
     	<property name="prenom" column="PRENOM" type="java.lang.String"/>
     
     	<set 	name="absences" 
                lazy="true"
                cascade="all-delete-orphan">
               <key column="MATRICULE_P" />
               <one-to-many class="Absence"/>
        </set>
     
      </class>
    </hibernate-mapping>
    codeabsence.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
    14
    15
    16
    17
    18
    19
    <?xml version="1.0" encoding='UTF-8'?>
    <!DOCTYPE hibernate-mapping PUBLIC
              "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     
    <hibernate-mapping package="com.gh.model">
     <class name="CodeAbsence" table="absence">
       <id name="code_a" column="CODE_A" type="java.lang.Integer">
            <generator class="native"/>
       </id>
     	<property name="libelle" column="LIBELLE" type="java.lang.String"/>
     
     	<set 	name="absences" 
                lazy="true">
               <key column="CODE_A" />
               <one-to-many class="Absence"/>
        </set>
      </class>
    </hibernate-mapping>
    et absence.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
    14
    15
    16
    17
    18
    19
    20
    <?xml version="1.0" encoding='UTF-8'?>
    <!DOCTYPE hibernate-mapping PUBLIC
              "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     
    <hibernate-mapping package="com.gh.model">
     <class name="Absence" table="absence_personnel">
     	<composite-id>
     		<key-many-to-one name="personnel" column="MATRICULE_P" class="Personnel"/>
     		<key-many-to-one name="codeAbscence" column="CODE_A" class="CodeAbsence"/>
     	</composite-id>
     
     <property name="dateAbsence"  column="DATE_ABSENCE" type="java.util.Date" />
     <property name="duree"  column="DUREE" type="java.lang.Integer" />
     <property name="motif"  column="MODIF" type="java.lang.String" />
     
     
     
      </class>
    </hibernate-mapping>

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 328
    Par défaut
    Bonjour,
    Merci c'est gentil de m'avoir repondu
    je testerai cela et puis j'espere que ca va marcher
    Bonne journée

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 328
    Par défaut
    est ce que c'est obligatoire de mettre un <set> absence au niveau du fichier CodeAbsence.hbm.xml ?

  7. #7
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    non,

    Tout dépend de la classe, mais en principe un Code-Libelle n'a que deux attributs le code et ... le libelle .

  8. #8
    Membre éclairé
    Inscrit en
    Juin 2007
    Messages
    328
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 328
    Par défaut
    je ss perdue la
    voila mon diagramme de classes joint
    et puis le code java des classes :
    Personnel.Java :
    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
     
    public class Personnel
    {
       public String nom_p;
       public String prenom_p;
       public String cin_p;
       public String tel_p;
       public Date date_embauche;
       public String mail_p;
       public String adresse_p;
       public Date date_naissance_p;
       public String civilite_p;
       public String etat_civil_p;
       public String cnss;
       public String cimr;
     
       public AbsencePersonnel absenceP; // je peux la declarer en tant que quoi                                             //au niveau du hbm?
     
     
    }
    Personnel.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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    <hibernate-mapping package="com.gh.model">
     <class name="Personnel" table="personnel">
      <id name="matricule" column="MATRICULE_P" type="java.lang.String">
            <generator class="native"/>
       </id>
     
    <property name="nom_p" column="NOM_	p" type="java.lang.String"/>
    <property name="prenom_p" column="PRENOM_P" type="java.lang.String"/>
    <property name="cin_p" column="CIN_P" type="java.lang.String"/>
    <property name="tel_p" column="TEL_P" type="java.lang.String"/>
    <property name="date_embauche" column="DATE_EMBAUCHE" type="java.util.Date"/>
    <property name="mail_p" column="PRENOM_P" type="java.lang.String"/>
    <property name="adresse_p" column="ADRESSE_P" type="java.lang.String"/>
    <property name="date_naissance_p" column="DATE_NAISSANCE_P" type="java.util.Date"/>
    <property name="civilite_p" column="CIVILITE_P" type="java.lang.String"/>
    <property name="etat_civil_p" column="ETAT_CIVIL_P" type="java.lang.String"/>
    <property name="cnss" column="CNSS_P" type="java.lang.String"/>
    <property name="cimr" column="CIMR_P" type="java.lang.String"/>
     
       <set 	name="absences" 
                lazy="true"
                cascade="all-delete-orphan">
               <key column="MATRICULE_P" />
               <one-to-many class="AbsencePersonnel"/>
       </set>
     
       </class>
    Absence.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class Absence {
     
    	protected String libelle; 
    	protected  AbsencePersonnel abscenceP;
    }
    Absence.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
    14
     
    <class name="Absence" table="absence">
       <id name="code_a" column="CODE_A" type="java.lang.Integer">
            <generator class="native"/>
       </id>
     	<property name="libelle" column="LIBELLE" type="java.lang.String"/>
     
     	<set 	name="personnel" 
                lazy="true">
               <key column="CODE_A" />
               <one-to-many class="AbsencePersonnel"/>
        </set>
     
       </class>
    AbsencePersonnel.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class AbsencePersonnel {
     
    	   protected float duree;
    	   protected String MOTIF;
    	   protected Date date_abs;
    	   protected Set absences= new HashSet();
    	   protected Set personnel=new HashSet();
     
     
    }
    AbsencePersonnel.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
     
    <class name="AbsencePersonnel" table="absence_personnel">
     
     	<composite-id>
     		<key-many-to-one name="matricule_p" column="MATRICULE_P" class="Personnel"/>
     		<key-many-to-one name="code_a" column="CODE_A" class="CodeAbsence"/>
     	</composite-id>
     
     <property name="date_abs"  column="DATE_ABS" type="java.util.Date" />
     <property name="duree"  column="DUREE" type="java.lang.Integer" />
     <property name="motif"  column="MOTIF" type="java.lang.String" />
     
     </class>
    qu'est ce que vs en pensez?c'est correct ?
    Images attachées Images attachées  

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/08/2013, 01h02
  2. Classe d'association, scaffolding et Many to many
    Par flotho dans le forum Grails
    Réponses: 0
    Dernier message: 09/02/2012, 18h56
  3. Requete SQL entre 2 tables liés par une relation many to many
    Par macmanaman dans le forum Langage SQL
    Réponses: 8
    Dernier message: 06/05/2009, 16h37
  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. Réponses: 3
    Dernier message: 26/02/2007, 10h14

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