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 :

[Hibernate3] relation 1-1 avec 2 pk


Sujet :

Hibernate Java

  1. #1
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut [Hibernate3] relation 1-1 avec 2 pk
    salut
    je cherche à modeliser la relation suivante (cardinalité diagramme de classes UML):

    CLIENT 0..1 ---posseder---> 1 COMPTE

    autrement dit, un client a forcement un compte
    un compte peu appartenir ou non a un client

    En relationnel g ecrit le schema suivant:
    CLIENT(numClient , nom, refCompte NOT NULL )
    COMPTE(numCompte, login, pass, refClient )

    compte et client ont 2 pk diférentes
    et dans compte g mis volontairement une reférence vers client (qui peut etre nulle).

    Dans Hibernate, g cru comprendre que les associations <onr-to-one> sont mappés avec le meme id des 2 cotés

    du coup, dans le mapping de client, quand je fais:

    <one-to-one name="compte" class="dao.Compte" foreign-key="refCompte" />
    et dans le compte mapping

    <one-to-one name="client" class="dao.Client" />
    et la ca marche pas, qd je cree le client, il ne met pas a jour la ref vers le compte dans la bd (par contre en memoire jvm ca marche)

    est ce que vous connaissez une autre solution (en dehors de <many-to-one>), pour que a partir d'un compte chargé en memoire, je puisse naviguer ves son client??

  2. #2
    Membre averti
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Points : 427
    Points
    427
    Par défaut
    Tu n'as pas besoin de mettre une référence dans les 2 tables pour exprimer ta relation (je ne suis pas expert en base de données).
    Tu peux juste te contenter de mettre une référence au compte dans la table des clients pour arriver au même résultat. Tu devras ajouter une contrainte d'unicité sur refCompte pour t'assurer d'une relation one-to-one.

    Maintenant, comment gérer ca au niveau d'hibernate avec <many-to-one>, la solution la plus simple :

    client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    private Compte compte;
     
    public void setCompte(Compte newCompte) {
    this.compte = newCompte;
    }
     
    public Compte getCompte() {
    return this.compte;
    }
     
    <many-to-one name="compte" 
    class="dao.Compte" column="refCompte" cascade="save-update" unique="true"/>
    compte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private Client client;
     
    public void setClient(Client newClient) {
    this.client = newClient;
    }
     
    public Client getClient() {
    return this.client;
    }
     
    <one-to-one name="client" class="dao.Client" property-ref="compte" />
    Il existe toutefois une autre solution qui n'utilise pas <many-to-one>, utiliser une relation sur la clé primaire :

    Client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <class name="Client" table="CLIENT">
    <id name="numClient" column="numClient">
    <generator class="foreign">
    <param name="property">compte</param>
    </generator>
    </id>
    ...
    <one-to-one name="compte" class="dao.Compte" constrained="true" /> 
    </class>
    Compte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <one-to-one name="client" class="dao.Client" cascade="save-update" />
    Dans cette situation, numClient sera une clé étrangère qui référence numCompte.

    Personnellement, je te conseille la première solution qui te donnera le même résultat et te permettra d'obtenir une plus grande flexibilité en cas d'évolution fonctionnelle.

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2002
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 186
    Points : 130
    Points
    130
    Par défaut
    merci ca marche

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

Discussions similaires

  1. Exemple d'application Relation Maitre-détail avec Dbexpress
    Par Peter K. dans le forum Bases de données
    Réponses: 0
    Dernier message: 13/11/2007, 11h33
  2. Gérer une relation m:n avec un DbLookupComboBox
    Par thibouille dans le forum Bases de données
    Réponses: 8
    Dernier message: 10/11/2007, 17h30
  3. metre en relation une form avec le poste de travail.
    Par nicolas1995 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/10/2007, 16h49
  4. Réponses: 1
    Dernier message: 15/01/2007, 17h19
  5. Modéliser relation d'hériatge avec DTD
    Par kobe dans le forum Valider
    Réponses: 1
    Dernier message: 18/10/2005, 18h14

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