Hibernate Books

All times are UTC - 5 hours [ DST ]



Post new topic Reply to topic  [ 2 posts ] 
Author Message
 Post subject: [MAPPING] one-to-one bidirectionnel optionnel
PostPosted: Thu May 19, 2011 5:11 pm 
Newbie

Joined: Thu May 19, 2011 5:00 pm
Posts: 2
Bonsoir.
Je viens à vous car j'ai un soucis de mapping one-to-one entre deux objets.

Contexte :
Je peux créer un objet A et un objet B indépendamment. Et B et A peuvent être associés en one-to-one de manière optionnelle.

One-To-One
- Ce qu'il est commun de trouver comme relation one-to-one est une association par contrainte de clé primaire. Ici, ça ne convient pas car les deux objets n'ont pas nécessairement la même clé (il me faut donc un mapping par clé étrangère).

- Ensuite, j'ai trouvé le mapping suivant, qui garantit le caractère bidirectionnel.
Code:
<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>
    <many-to-one name="address"
        column="addressId"
        unique="true"
        not-null="true"/>
</class>

<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>
   <one-to-one name="person"
        property-ref="address"/>
</class>


Cependant, quand je prends cet exemple et que je cherche à charger un objet Adress sans Person associée, j'ai l'erreur suivante : "java.lang.IllegalArgumentException: id to load is required for loading
org.hibernate.event.LoadEvent.<init>(LoadEvent.java:51)"
J'en déduis donc que dans cette configuration, l'association est obligatoire et non optionnelle (comme le prouve not-null=true).

- Je me demande donc si la seule solution (que je n'ai pas eu le temps de tester) est l'association one-to-one bidirectionnelle par table de jointure, comme décrite sur ce site plutôt complet (http://www.dil.univ-mrs.fr/~massat/docs/hibernate-3.1/reference/fr/html/associations.html) :
Code:
<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>
    <join table="PersonAddress"
        optional="true">
        <key column="personId"
            unique="true"/>
        <many-to-one name="address"
            column="addressId"
            not-null="true"
            unique="true"/>
    </join>
</class>

<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>
    <join table="PersonAddress"
        optional="true"
        inverse="true">
        <key column="addressId"
            unique="true"/>
        <many-to-one name="person"
            column="personId"
            not-null="true"
            unique="true"/>
    </join>
</class>


Qu'en pensez-vous?
Merci d'avance.


Top
 Profile  
 
 Post subject: Re: [MAPPING] one-to-one bidirectionnel optionnel
PostPosted: Fri May 20, 2011 4:25 am 
Newbie

Joined: Thu May 19, 2011 5:00 pm
Posts: 2
Pour information, j'ai essayé la dernière conf. ce matin et j'ai l'erreur suivante quand je souhaite charger un des deux éléments non associé au deuxième :

Code:
java.lang.IllegalArgumentException: id to load is required for loading
at org.hibernate.event.LoadEvent.<init>(LoadEvent.java:89)


Comme si l'asscoiation était obligatoire... Je ne comprends vraiment pas.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.