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 :

balise one-to-one hibernate


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 53
    Points : 48
    Points
    48
    Par défaut balise one-to-one hibernate
    Bonjour,

    je travaille avec hibernate 3.1.

    J'ai 2 tables :

    entetedossier --(1,1) ----- (0,1) ---> generaliteclient

    Le mapping sur la table entête dossier est :

    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
     
    <hibernate-mapping
      schema="HDI"
            package="com.smabtp.injecdosindex.ajustage">
        <class name="EnteteDossier" table="XD_ENT_DOSS">
            <id name="numdossierinterne" type="integer" >
             <column name="XD_NI_DOSS_IGD" sql-type="number" not-null="true" />
            </id>
            <property name="naturedossier" type="string" >
             <column name="XD_CN_DOSS_IGD" sql-type="char(2)" not-null="true" />
            </property>
            <property name="codesousysteme" type="string" >
             <column name="XD_NI_SSI_IGD" sql-type="char(7)" not-null="true" />
     
      <one-to-one name="clientgeneralites" class="ClientGeneralite" constrained="true"/>
     
        </class>
    </hibernate-mapping>

    Le mapping sur la table generalité client est :

    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" "<a href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" target="_blank">http://hibernate.sourceforge.net/hib...apping-3.0.dtd</a>">
    <hibernate-mapping
      schema="HDI"
            package="com.smabtp.injecdosindex.ajustage">
        <class name="ClientGeneralite" table="XD_GEN_CLISOUS">
            <id name="numdossierinterne" >
       <column name="XD_NI_DOSS_IGD" sql-type="number" not-null="true" />
            </id>
            <property name="natureclient" >
             <column name="CC_CN_CLI_IGD" sql-type="char(2)" not-null="true" />
            </property>
            <property name="statutclient" >
             <column name="CC_CS_CLI_IGD" sql-type="char(1)" not-null="true" />
            </property>
     
      <one-to-one name="entetedossiers" class="EnteteDossier" />
     
        </class>
    </hibernate-mapping>
    est ce pertinant d'utilisé une balise one-to-one, lorsque j'ai une relation entre les 2 tables qui est :

    entetedossier --(1,1) ----- (0,1) ---> generaliteclient

    Merci de votre reponse.

  2. #2
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    La relation est bidirectionnelle ou non ? ou se situe la clé etrangère entre les deux entités ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 53
    Points : 48
    Points
    48
    Par défaut
    En faite il n'y a pas vraiment de clé étrangère
    la première table EnteteDossier a un seul champ clé primaire :

    numdossierinterne

    et la 2ème table ClientGeneralite a aussi uniquement un champ clé primaire qui est le même champ :

    numdossierinterne

    La table entête dossier peut avoir une référence a des :
    Client
    Souscripteur
    Police et
    Sinistre

    alors que la table ClientGeneralite, comme sont nom l'indique ne fait référence qu'au client.

    Ce qui veut dire que par exemple si la table entete dossier contient une occurrence qui fait référence à un client, il y aura forcement une occurrence dans la table ClientGeneralite. Par compte si la table entete dossier a une occurence qui fait référence a une police, il n'y aura pas d'occurrence correspondante dans la table ClientGeneralite.


    A bientôt.

  4. #4
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    Tu peux donc toujours mettre une association one-to-one avec jointure en utilisant la table ClientGeneralite comme table de jointure ... de la maniere suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <class name="EnteteDossier">
    ...
        <join table="CLIENTGENERALITES" optional="true">
            <key column="numdossierinterne" 
                 unique="true"/>
            <many-to-one name="numdossierinterne"
                column="addressId" 
                not-null="true"
                unique="true"/>
        </join>
    Le many-to-one se transforme en one-to-one grace aux deux unique="true"

    PS: Je ne garantis pas que cette solution est la plus simple !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 53
    Points : 48
    Points
    48
    Par défaut
    Merci pour ta reponse rapide,

    Mais j'ai du mal à comprendre pourquoi, tu passes par une jointure ?

    Est ce que ça veut dire que la relation one-to-one est reservé au relation tel que :
    si la table A a une occurrence avec une clé étant rempli à la valeur 4 (par exemple)

    Forcement la table B aura une occurrence qui contient le même champ étant rempli à 4.

  6. #6
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    Bah en fait, en y reflechissant, tu pourrais peut etre aussi bien passer par le mapping suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <many-to-one name="clientgeneralités" 
                        column="numdossierinterne" 
                        unique="true" 
                        not-null="false" />
    Ma méthode était quelque peu ... violente et compliquée

    Mais je te conseillerai, dans ton cas, d'aller jeter un oeil du coté de cette url pour voir si une association bidirectionnelle ne pourrait pas s'appliquée (et ainsi, ton cas serait "tout trouvé", cf. one-to-one sur clé primaire)

    Pour les tags one-to-one, ceux ci s'appliquent apparemment uniquement dans les cas des associations bidirectionnelles si l'on suit le guide fourni par Hibernate (en supposant qu'il référence les meilleures pratiques de mapping pour les cas cités)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 53
    Points : 48
    Points
    48
    Par défaut
    Je me suis renseigné :

    En faite la balise hibernate one-to-one permet les associations suivantes :

    (1,1) ------>(1,1)
    (1,1) ------>(0,1)
    (0,1) ------>(0,1)

    A bientôt.

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

Discussions similaires

  1. jsf one to many hibernate
    Par janatte dans le forum JSF
    Réponses: 16
    Dernier message: 31/07/2010, 09h57
  2. [Hibernate]Mapping relation one-to-one
    Par K-Kaï dans le forum Hibernate
    Réponses: 9
    Dernier message: 23/06/2006, 16h02
  3. Réponses: 3
    Dernier message: 08/06/2006, 17h38
  4. [Hibernate] Mapping de one to one ?
    Par Limod dans le forum Hibernate
    Réponses: 4
    Dernier message: 07/06/2006, 10h06
  5. [Hibernate][one-to-one] clé etrangère avec des blancs
    Par seb_fou dans le forum Hibernate
    Réponses: 1
    Dernier message: 06/04/2006, 10h28

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