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 :

Relation one-to-many qui ne se crée pas


Sujet :

Hibernate Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Relation one-to-many qui ne se crée pas
    Salut,

    Je commence à utiliser hibernate, j'arrive bien à utiliser les relations many-to-many mais je bloque sur une relation one-to-many.


    Je veux créer deux tables : ROLE <--> USER
    Un role a plusieurs utilisateurs et un utilisateur a un seul rôle.

    Voici mes deux fichiers hibernate :

    Role.hbm.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <hibernate-mapping>
        <class name="cwkmanagerpojo.Role" table="ROLE">
            <id name="id" column="ROLE_ID">
                <generator class="native"/>
            </id>
            <property name="role"/>
            <set name="myusers" table="USERS" cascade="all" >
                 <key column="urole"/>
                 <one-to-many class="cwkmanagerpojo.Users"/>
            </set> 
        </class>
    </hibernate-mapping>
    Users.hbm.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <hibernate-mapping>
        <class name="cwkmanagerpojo.Users" table="USERS">
            <id name="id" column="USERS_ID">
                <generator class="native"/>
            </id>
            <property name="login"/>
            <property name="password"/>
            <property name="urole"/>
        </class>
    </hibernate-mapping>
    Le code java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            Users user = (Users) session.load(Users.class, userId);   
     
            Role studentRole = (Role) session.load(Role.class, roleId);
     
            studentRole.getMyusers().add(user);
     
            session.getTransaction().commit();
    J'ai bien réussi a créer séparément le role et l'utilisateur mais ensuite je n'arrive pas à créer le lien entre les deux, le champs urole de l'utilisateur qui correspond à son role ne prend pas la valeur ROLE_ID du ROLE.

    Si quelqu'un a une idée, merci d'avance.

  2. #2
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Le code de Role.hbm.xml est en fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            <set name="myusers" table="USERS" cascade="all" >
                 <key column="ROLE_ID"/>
                 <one-to-many class="cwkmanagerpojo.Users"/>
            </set>

  3. #3
    Membre régulier Avatar de DjGonk
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Points : 98
    Points
    98
    Par défaut
    Pour ton fichier "role.hbm.xml" tu dois mettre une "one-to-many" car avec le set tu vas recuperer tous les utilisateurs ayant ce role.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        <set name="myusers" lazy="true" inverse="true" cascade="all">
            <key>
                <column name="ROLE_ID" />
            </key>
     
            <one-to-many class="cwkmanagerpojo.Users"/>
        </set>
    Pour ton fichier "user.hbm.xml" tu dois mettre une "many-to-one" permet d'avoir un seul rôle pour l'utilisateur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        <many-to-one  name="role" class="cwkmanagerpojo.Role" not-null="true">
            <column name="ID_ROLE" />
        </many-to-one>

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci,

    Ta solution semble plus complète que la mienne en effet.

    La première solution que j'avais apporté marche aussi et crée automatiquement un champs ROLE_ID dans la table USERS lors de la génération de la base de données.

  5. #5
    Membre régulier Avatar de DjGonk
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Points : 98
    Points
    98
    Par défaut
    Ok, pas de problème.

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

Discussions similaires

  1. [Criteria] Relation one-to-many
    Par dedeloux dans le forum Hibernate
    Réponses: 1
    Dernier message: 19/03/2008, 14h00
  2. Réponses: 4
    Dernier message: 18/06/2007, 08h30
  3. [Hibernate] Relation one to many
    Par BRAUKRIS dans le forum Hibernate
    Réponses: 2
    Dernier message: 23/08/2006, 11h51
  4. [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
  5. [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