2009-08-06 11 views
6

J'ai une classe A qui a un ensemble de B. Cependant, ces deux objets sont liés par des champs qui ne sont PAS la clé primaire.Hibernate un à plusieurs en utilisant autre chose qu'une clé primaire

Pour B, je peux utiliser <key column>, mais comment puis-je spécifier que la jointure doit être A. secondary_column? Pas A. table_primary_key_id?

<class table="a"> 
    <id column="table_primary_key_id"> 
    </id> 
    <property column="secondary_column" /> 

    <set table="B" lazy="false" > 
     <key column="B_not_primary" /> 
     <one-to-many class="BClass" /> 
    </set> 
</class>  
+1

Je ne pense pas que Hibernate vous permettra de faire ce que vous voulez. – skaffman

+0

Hibernate ne devrait vraiment pas vous laisser faire cela. Cela sent la mauvaise conception de la base de données. Quel problème essayez-vous de résoudre ici? –

+1

J'essaie de résoudre la mauvaise conception de base de données ... c'est une base de données ancienne de 10 ans et plus :) Je déteste ça, ça me hante. J'espère que je vais convaincre Managemnt de le changer pour quelque chose de plus OO amical. –

Répondre

4

résolu avec

<set name="someSet" table="B" lazy="false"> 
    <key column="B_not_primary" property-ref="secondary_column" /> 
    <one-to-many class="BClass" /> 
</set>