2010-11-09 5 views
0

J'ai une crampe de cerveau essayant de comprendre cette cartographie.Hibernate self-table avec le mappage de table de jointure

Voici mon db:

CUSTOMER    CUSTOMERFAMILY    CUSTOMER 
PK SITE_ID -----------PRIMARYSITE_ID    -- PK SITE_ID 
         MEMBERSITE_ID -------------| 

Cela crée une relation où un client ne peut avoir qu'un seul parent (car il y a une contrainte unique sur CUSTOMERFAMILY.MEMBERSITE_ID) et un client peut avoir de nombreux enfants. (c'est-à-dire que Pepsi Co. possède FritoLay, Gatorade, etc., donc PepsiCo aura plusieurs enfants mais Gatorade n'a qu'un parent: PepsiCo).

J'essaie de mapper une propriété dans mon objet client appelé parent, je l'ai essayé beaucoup de combinaisons de cette idée sans succès:

<join table="CUSTOMERFAMILY" inverse="false"> 
    <key column="MEMBERSITE_ID" unique="true" /> 
    <many-to-one name="parent" column="SITE_ID" not-null="true"><formula>PRIMARYSITE_ID</formula></many-to-one> 
</join> 

Toutes les idées ??

Merci d'avance.

(S'il vous plaît ne demandez pas pourquoi la DB est conçu de cette façon ... l'ancien système, ce n'était pas moi!))

Répondre

2

En supposant que vous avez

private Customer parent; 
private Set<Customer> children; 

mapping ressemble ceci:

<set name = "children" table = "CUSTOMERFAMILY">    
    <key column="PRIMARYSITE_ID" /> 
    <many-to-many column = "MEMBERSITE_ID" entity-name="package.Customer" /> 
</set> 

<join table="CUSTOMERFAMILY" inverse="true"> 
    <key column="MEMBERSITE_ID" /> 
    <many-to-one name="parent" column = "PRIMARYSITE_ID" /> 
</join> 
+0

Excellent! Merci! Cela a fonctionné, maintenant, si je veux utiliser une requête nommée pour charger un client, j'obtiens une erreur PRIMARYSITE_ID: identificateur invalide –