Bonjour à tous,
voici ma devinette du jour : j'ai deux tables Contact et Relation ayant donné naissance à deux classes du même nom. Deux contacts peuvent être liés par une relation, un contact peut avoir un ensemble de relations.
La table Relation a la tête suivante :
La table Contact quant à elle, ressemble à :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 relation ( idRelation : String PK, idApp : integer, idPere : integer, idFils : integer)
Les champs idPere et idFils de la table Relation correspondent au champ idContact de la table Contact. Comme on peut le constater, ces deux clés étrangères ne pointent pas sur la clé primaire de la table Contact
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 contact ( idApp : integer PK, email : string PK, idContact : integer)
Comment puis-je mapper cette association sous Hibernate, de idPere vers idContact et de idFils vers idContact dans un premier temps, et si possible en ajoutant la relation idApp-idApp par la suite ?
J'ai déjà essayer les mappings suivants :
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 <class name="Contact" table="contact"> <composite-id> <key-property name="idApp" column="idApp" type="integer" /> <key-property name="email" column="mail" type="string" /> </composite-id> <property name="idContact" column="idContact" type="integer" not-null="true" /> <set name="relationsFils" cascade="all-delete-orphan" inverse="true" lazy="true"> <key column="idContact" not-null="true" /> <one-to-many class="Relation" /> </set> <set name="relationsPeres" cascade="all-delete-orphan" inverse="true" lazy="true"> <key column="idContact" not-null="true" /> <one-to-many class="Relation" /> </set> </class>Je précise que retoucher la base de données ne doit se faire qu'en tout tout dernier ressort.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <class name="Relation" table="relation"> <id name="idRelation" column="idRelation" type="string" /> <property name="idFils" column="idFils" type="integer" not-null="true" /> <property name="idPere" column="idPere" type="integer" not-null="true" /> <property name="idApp" column="idApp" type="integer" not-null="true" /> <many-to-one name="pere" cascade="all" column="idPere" property-ref="idContact" lazy="no-proxy" not-null="true" class="Contact" /> <many-to-one name="fils" cascade="all" column="idFils" property-ref="idContact" lazy="no-proxy" not-null="true" class="Contact" /> </class>
Merci par avance,
MiniMarch
Partager