2008-11-04 44 views
7

Hiện nay tôi có một cấu trúc như thế này:Mapping thừa kế đa cấp trong Hibernate

A 
| 
+--B 
| 
+--C 

Nó ánh xạ với một bảng cho mỗi lớp con sử dụng các bảng tham gia. Vì lý do lịch sử tôi cũng sử dụng một phân biệt đối xử, vì vậy tình hình hiện tại được mô tả trong Section 9.1.3 of the Hibernate manual.

Câu hỏi: Làm thế nào để kéo dài tuổi lập bản đồ cho một cấu trúc như thế này:

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

Tôi có thể <subclass> một <subclass> trong việc lập bản đồ ngủ đông? Tôi cần những gì <key>?

Trả lời

5

chưa được thử nghiệm nhưng, theo các liên kết mà bạn gửi nếu bạn đang sử dụng 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

vẻ để làm việc. Cảm ơn nhiều! – Henning

0

Sử dụng chú thích, nó có thể được thực hiện như sau:

@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{}