2008-11-04 4 views
7

Actuellement j'ai une structure comme ceci:Mapping d'héritage multi-niveaux dans Hibernate

A 
| 
+--B 
| 
+--C 

Il est mis en correspondance avec une table par sous-classe en utilisant les tables jointes. Pour des raisons historiques j'utilise aussi un discriminateur, donc la situation actuelle est comme décrit dans Section 9.1.3 of the Hibernate manual.

Question: Comment puis-je étendre le mappage pour une structure comme celle-ci:

A 
| 
+--B 
| | 
| D 
| 
+--C 

Puis-je <subclass> un <subclass> dans le mappage de mise en veille prolongée? De quoi ai-je besoin?

Répondre

5

pas testé mais, selon le lien que vous avez affichée si vous utilisez hibernate3

<hibernate-mapping> 
    <class name="A" table="A"> 
    <id name="id" type="long" column="a_id"> 
     <generator class="native"/> 
    </id> 
    <discriminator column="discriminator_col" type="string"/> 
    <property name="" type=""/> 
    <!-- ... --> 
    </class> 
    <subclass name="B" extends="A" discriminator-value="B"> 
    <!-- ... --> 
    </subclass> 
    <subclass name="D" extends="B" discriminator-value="D"> 
    <!-- ... --> 
    </subclass> 
    <subclass name="C" extends="A" discriminator-value="C"> 
    <!-- ... --> 
    </subclass> 
</hibernate-mapping> 
+0

semble fonctionner. Merci beaucoup! – Henning

0

Utilisation d'annotations, il peut se faire comme suit:

@Entity 
@Inheritance(strategy = InheritanceType.JOINED) 
@DiscriminatorColumn(name="LoanType",discriminatorType="String") 
@Table(name = "A") 
public class A implements Serializable{ 
} 

@Entity 
@Table(name= "B") 
@PrimaryKeyJoinColumn(name = "B_ID", referencedColumnName ="A_ID") 
public class B extends A{ 
} 


@Entity 
@Table(name= "C") 
@PrimaryKeyJoinColumn(name = "C_ID", referencedColumnName = "B_ID") 
public class C extends B{}