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 relation many-to-one


Sujet :

Hibernate Java

  1. #1
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut Hibernate relation many-to-one
    Bonjour.

    Je travaille avec GWT/Hibernate.

    J'aimerais lier deux classes ainsi : Une société a plusieurs utilisateurs, un utilisateur appartient a une seule société.

    Qui se traduit par : Society 1-----* User

    Pour l'instant, mes deux classes vivent séparément et je peux créer des sociétés et des utilisateurs.
    J'aimerais que ce lien soit bidirectionnel dans le sens où je veux pouvoir avoir accès aux utilisateurs d'une société à partir de celle-ci et avoir accès à la société d'un utilisateur.

    Je suppose donc qu'il il faille définir un attribut Set<User> users dans la classe Society et un Societey s dans la classe User.
    Là où je suis bloqué c'est sur le mapping. (Au niveau SQL, j'aimerais simplement avoir un champ society_id dans la table user).

    Voici mes fichiers actuels (sans liens) :
    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 package="com.enee.model">
        <class name="User" table="user">
            <id name="id" column="id">
                <generator class="native" />
            </id>
            <property name="login" column="login" type="string" lazy="true"
                length="255" not-null="true" unique="true" />
            <property name="password" column="password" type="string"
                lazy="true" length="16" not-null="true" />
            <property name="sel" column="sel" type="binary" lazy="true"
                length="24" not-null="true" />
        </class>
    </hibernate-mapping>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <hibernate-mapping package="com.enee.model">
        <class name="Society" table="society">
            <id name="id" column="id">
                <generator class="native" />
            </id>
            <property name="name" column="name" type="string" lazy="true"
                length="125" not-null="true" unique="true" />
        </class>
    </hibernate-mapping>
    J'ai chercher sur plusieurs sites mais je suis toujours bloqué, il me faudrait LA solution simplissime :p

    Pouvez-vous m'aider ? Merci d'avance.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274

  3. #3
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    OK merci.

    Et au niveau code ? Avec l'exemple de la doc, je met un Long addressId côté Person et quoi côté Address ?

    Je ne comprends pas pourquoi ils écrivent :
    Si vous utilisez une List, ou toute autre collection indexée, vous devez paramétrer la colonne key de la clé étrangère à not null, et laisser Hibernate gérer l'association depuis l'extrémité collection pour maintenir l'index de chaque élément (rendant l'autre extrémité virtuellement inverse en paramétrant update="false" et insert="false") :
    N'est-il pas obligatoire d'utiliser une liste ? C'est une relation 1<->* après tout, comment pourrait-on faire autrement que mettre une liste de Person côté Adress ??? (sans créer une nouvelle table).
    C'est encore vague comme explication pour moi.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Salut,

    Tu parles d'adresse dans ton second post et de société dans ton premier.
    Je comprends pas trop... On va supposer que tu parles de société dans les deux.

    Et au niveau code ? Avec l'exemple de la doc, je met un Long addressId côté Person et quoi côté Address ?
    Avec les orm, tu dois utiliser des objets pour lier les objets, pas des id, les notions sql d'id, de fk sont gérées par l'orm, au mieux on peut définir leur nom.

    N'est-il pas obligatoire d'utiliser une liste ? C'est une relation 1<->* après tout, comment pourrait-on faire autrement que mettre une liste de Person côté Adress ??? (sans créer une nouvelle table).
    Pr une multiplicité > à 0, oui tu as forcément une collection pour représenter l'association.

    Je travaille plus trop avec du xml pr Hibernate mais en gros ca doit te faire un truc dans le genre pour User:
    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
     
    <hibernate-mapping package="com.enee.model">
        <class name="User" table="user">
            <id name="id" column="id">
                <generator class="native" />
            </id>
            <property name="login" column="login" type="string" lazy="true"
                length="255" not-null="true" unique="true" />
            <property name="password" column="password" type="string"
                lazy="true" length="16" not-null="true" />
            <property name="sel" column="sel" type="binary" lazy="true"
                length="24" not-null="true" />
            <many-to-one name="societe" 
             class="Societe" column="societe_fk" />
        </class>
    </hibernate-mapping>
    Ici societe_fk est le nom de le la fk sur la table société, fk qu'on référence de l'autre côté de l'association.

    Pour Societe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <hibernate-mapping package="com.enee.model">
        <class name="Society" table="society">
            <id name="id" column="id">
                <generator class="native" />
            </id>
            <property name="name" column="name" type="string" lazy="true"
                length="125" not-null="true" unique="true" />
    	   <set name="utilisateurs" >
                <key column="societe_fk"/>
                <one-to-many class="User"/>
            </set>
        </class>
    </hibernate-mapping>

  5. #5
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    Problème résolu. Voici, pour ceux que çà intéresse, une relation un à plusieurs (une société a plusieurs utilisateurs, un utilisateur appartient à une société).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        <class name="User" table="user">
            <id name="id" column="id">
                <generator class="native" />
            </id>
            <-- vos attributs -->
            <many-to-one name="society" class="Society" column="society_id"></many-to-one>
        </class>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        <class name="Society" table="society">
            <id name="id" column="id">
                <generator class="native" />
            </id>
            <-- vos attributs -->
            <set name="users">
                <key column="society_id" />
                <one-to-many class="User" />
            </set>
        </class>
    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 User extends LightEntity implements Serializable
    {   
        // vos attributs
        private Society           society;
     
        public User()
        {}
     
        // vos getters/setters
     
        public Society getSociety()
        {
            return society;
        }
     
        public void setSociety(Society society)
        {
            this.society = society;
        }
    }
    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 Society extends LightEntity implements Serializable
    {
        // vos attributs
        private Set<User>         users;
     
        public Society()
        {}
     
        // vos getters/setters
     
        public Set<User> getUsers()
        {
            return users;
        }
     
        public void setUsers(Set<User> users)
        {
            this.users = users;
        }
    }

+ 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 3 et relation many-to-one
    Par the_frogkiller dans le forum Hibernate
    Réponses: 1
    Dernier message: 01/05/2009, 13h35
  3. [Hibernate 3] Relation many-to-one
    Par LordBob dans le forum Hibernate
    Réponses: 13
    Dernier message: 06/11/2008, 09h27
  4. Hibernate : suppression sur relation many to one
    Par taf dans le forum Hibernate
    Réponses: 1
    Dernier message: 23/05/2006, 13h08
  5. [hibernate]relation many-to-many
    Par quilo dans le forum Hibernate
    Réponses: 5
    Dernier message: 20/12/2005, 10h07

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