2011-08-01 4 views
0

J'essaie de mapper un ensemble de tables qui ont une relation compliquée entre elles. Je les tableaux ci-dessous avec des champs:Mappage de tables à deux tables héritées dans Hibernate

Table: Parent 
     id 
     type 

Table: Child1 
     parentId : foreign 
     list of fields 

Table: Child2 
     parentId : foreign 
     list of fields 

Dans la base de données l'idée de base est que le champ de type de tables parent détermine si un enregistrement lié se produit dans Enfant1 ou Enfant2. De cette manière, je stocke des informations sur l'enregistrement en fonction de son type, par ex. ils sont tous des clients, mais certains sont des particuliers et d'autres sont des entreprises, ce qui me permet de stocker des informations distinctes en fonction de cela.

Ma question est comment puis-je modéliser ceci dans Hibernate? Je sais utiliser @SecondaryTable pour fusionner deux tables mais comment faire cela dépend d'une valeur dans la table parent?

Répondre

1

Ce que vous recherchez utilise une colonne discriminante pour la classe. Voir Hibernate docs re inheritance mapping

L'exemple est

<class name="Payment" table="PAYMENT"> 
    <id name="id" type="long" column="PAYMENT_ID"> 
     <generator class="native"/> 
    </id> 
    <discriminator column="PAYMENT_TYPE" type="string"/> 
    <property name="amount" column="AMOUNT"/> 
    ... 
    <subclass name="CreditCardPayment" discriminator-value="CREDIT"> 
     <join table="CREDIT_PAYMENT"> 
      <property name="creditCardType" column="CCTYPE"/> 
      ... 
     </join> 
    </subclass> 
    <subclass name="CashPayment" discriminator-value="CASH"> 
     ... 
    </subclass> 
    <subclass name="ChequePayment" discriminator-value="CHEQUE"> 
     ... 
    </subclass> 
</class> 
+0

Cela ressemble beaucoup merci. Pourriez-vous expliquer comment faire cela avec des annotations? serait bon d'apprendre –

+0

@Michael: http://docs.jboss.org/hibernate/annotations/3.5/reference/fr/html_single/#d0e1168 –

+0

N'étant pas sadique ou quoi que ce soit mais on m'a dit de prendre le discriminateur de un identifiant qui est étranger d'une autre table avec une description dedans. Une idée de comment cela pourrait fonctionner? –