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 :

many to one / one to many


Sujet :

Hibernate Java

  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut many to one / one to many
    Salut,
    je viens de lire c chapitre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.hibernate.org/hib_docs/v3/reference/fr/html/mapping.html
    mais pour l'instant je vois pas encore bien, comment je vais representer les relations many-to-one, many-to-many ou encore one-to-many.
    Si vous permettez, je voudrais savoir concraitement comment representer tous ça.
    si par exemple :
    j'ai les deux tables suivantes :
    Utilisateur : Utilisateur_Id, Utilisateur_nom, Utilisateur_login, Droit_id
    avec Droit_id : clé etrangere de la table Droit
    Droit : Droit_id, Droit_libelle

    a koi vont ressembler mes fichiers hbm ?

    Merci pour votre aide

  2. #2
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Bonjour,

    L'idée, ca sera plutot que tu ecrives le fichier hbm, tu as la doc hibernate en francais avec surement ce que tu demandes ici:
    http://www.hibernate.org/hib_docs/v3...ociations.html

    Une fois ecrit, tu le testes et après si ca marche pas tu viens poster ton erreur ou ton probleme. A ce moment la, on pourra t'aider.

    a koi vont ressembler mes fichiers hbm ?
    Je peux déja te dire qu'ils vont ressembler à ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?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 ...>
    ...
    </class>
    </hibernate-mapping>

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Salut,
    je tiens à préciser que quand j'ai dis
    a koi vont ressembler mes fichiers hbm ?
    ca veut pas dire que je suis un glandeur, j'ai pas envie de travailler et je demande aux autres de faire mon boulot. Surtout pas ça.
    mes fichiers hbm sont
    Intervenant.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
    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
     
    <hibernate-mapping>
    <!-- 
        Created by the Middlegen Hibernate plugin 2.2
     
        http://boss.bekk.no/boss/middlegen/
        http://www.hibernate.org/
    -->
     
    <class 
        name="com.pia.agp.mapping.Intervenant" 
        table="intervenant"
        lazy="false"
    >
     
        <id
            name="intervenantId"
            type="java.lang.Integer"
            column="INTERVENANT_ID"
        >
     
            <generator class="increment" />
        </id>
     
        <property
            name="intervenantNom"
            type="java.lang.String"
            column="INTERVENANT_NOM"
            length="30"
        />
        <property
            name="intervenantPrenom"
            type="java.lang.String"
            column="INTERVENANT_PRENOM"
            length="30"
        />
        <property
            name="intervenantLogin"
            type="java.lang.String"
            column="INTERVENANT_LOGIN"
            length="30"
        />
        <property
            name="intervenantMdp"
            type="java.lang.String"
            column="INTERVENANT_MDP"
            length="30"
        />
        <property
            name="intervenantMdp2"
            type="java.lang.String"
            column="INTERVENANT_MDP2"
            length="30"
        />
        <property
            name="intervenantEmail"
            type="java.lang.String"
            column="INTERVENANT_EMAIL"
            length="30"
        />
        <property
            name="intervenantTel"
            type="java.lang.String"
            column="INTERVENANT_TEL"
            length="15"
        />
        <property
            name="intervenantFonction"
            type="java.lang.String"
            column="INTERVENANT_FONCTION"
            length="20"
        />
        <property
            name="intervenantDatedebutcontrat"
            type="java.sql.Date"
            column="INTERVENANT_DATEDEBUTCONTRAT"
            not-null="true"
            length="10"
        />
        <property
            name="intervenantDatefincontrat"
            type="java.sql.Date"
            column="INTERVENANT_DATEFINCONTRAT"
            not-null="true"
            length="10"
        />
        <property
            name="coutjournalierexperianId"
            type="java.lang.String"
            column="COUTJOURNALIEREXPERIAN_ID"
            not-null="true"
            length="32"
        />
        <property
            name="droitId"
            type="long"
            column="DROIT_ID"
            not-null="true"
            length="11"
        />
     
        <!-- Associations -->
     
     
    </class>
    </hibernate-mapping>
    et Droit.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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
     
    <hibernate-mapping>
    <!-- 
        Created by the Middlegen Hibernate plugin 2.2
     
        http://boss.bekk.no/boss/middlegen/
        http://www.hibernate.org/
    -->
     
    <class 
        name="com.pia.agp.mapping.Droit" 
        table="droit"
        lazy="false"
    >
     
        <id
            name="droitId"
            type="java.lang.Long"
            column="DROIT_ID"
        >
     
            <generator class="increment" />
        </id>
     
        <property
            name="droitDroit"
            type="java.lang.String"
            column="DROIT_DROIT"
            length="30"
        />
     
        <!-- Associations -->
     
     
    </class>
    </hibernate-mapping>
    donc ce que je voulais savoir, est ce qu'il suffit de rajouter ds mon fichier Intervenant.hbm.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <set name="droitId" inverse="true">
    			<key column="DROIT_ID"/>
    			<one-to-many class="Droit"/>
    	</set>
    et enlever
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <property
            name="droitId"
            type="long"
            column="DROIT_ID"
            not-null="true"
            length="11"
        />
    Merci pour votre aide

  4. #4
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Autant pour moi, à ta place, je mettrais plutot many-to-one pour les FK (ou one-to-one s'il faut que la clé etrangere soit unique dans la table)

    ceci donnerait alors quelque chose de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <many-to-one
                name="droitId"    
                class="i2.application.xxx.zzz.yyy.nom_de_ta_classe_java"
                cascade="none"
                outer-join="auto"
                update="true"
                insert="true"
                column="DROIT_ID"
                not-null="true"
            />
    l'attribut class correspond au package+nom de ta classe java où tu as tout tes getters et setters sur tes attributs. il ne faut pas mettre le .java pour info.

    Bonne chance

  5. #5
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Par défaut
    salut dans ton fichier hbm fils tu n'a qu'a ecrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <many-to-one name=" table_parent" class="Table_parent" column="Id_parent"/>
    le tour est joué
    bonne chance

  6. #6
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Merci de m'avoir répondu Zorm,
    la régle de gestion qu'ill y a entre Intervenant et Droit et la suivante :
    Un intervenant dispose d'un droit d'accés à l'application et un droit peut etre attribué a 1 ou plusieurs intervenant.
    c'est pq je voulais mettre one-to-many ds Intervenant et many-to-one ds Droit.
    Est ce que je me trempe ?
    Sinon si j'ecris <many... , est ce qu'il faut que j'enleve
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <property
            name="droitId"
            type="long"
            column="DROIT_ID"
            not-null="true"
            length="11"
        />
    ou bien je la garde ?

    Merci à ts

  7. #7
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Ok Merci, je vais essayer de faire ça.
    Donc mnt si j'effectue une quelconque modification dans ma table droit ça va se repercuter automatiquement sur ma table Intervenant. plus précisément si je supprime un droit est ce qu'il va etre supprimer de la table Intervenant ?
    Et ce que je voudrais savoir aussi si vous permmettez, ça m'offre koi en plus si je défini c'est relation (ds le cas ou la suppression n'est pas gérer)

    Merci bien

  8. #8
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    C'est bien many-to-one qu'il faut utiliser donc.

    Effectivement, remplace <property name="droitId" ... par ce que je t'ai donné dans Intervenant.hbm.xml en faisant bien la correspondance avec ton fichier .java pour le mapping par l'intermediaire de l'attribut class de many-to-one

    Bonne chance

  9. #9
    Membre émérite Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Citation Envoyé par Esil2008
    Donc mnt si j'effectue une quelconque modification dans ma table droit ça va se repercuter automatiquement sur ma table Intervenant.
    A mon avis, l'attribut cascade doit permettre ceci:
    http://www.hibernate.org/hib_docs/v3...ate-transitive

  10. #10
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    456
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 456
    Par défaut
    Merci bq pour ton aide.

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

Discussions similaires

  1. Too many connections (or not Too many connections ?)
    Par Julien Bodin dans le forum Administration
    Réponses: 2
    Dernier message: 30/11/2010, 17h36
  2. [Hibernate] Relation one to many
    Par BRAUKRIS dans le forum Hibernate
    Réponses: 2
    Dernier message: 23/08/2006, 11h51
  3. [hibernate] relation one-to-many avec plusieurs clés
    Par seb_fou dans le forum Hibernate
    Réponses: 6
    Dernier message: 16/03/2006, 14h47
  4. [EJB2.1 Entity] [CMR] Relation One to Many
    Par hamed dans le forum Java EE
    Réponses: 2
    Dernier message: 31/12/2003, 14h26

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