2015-04-22 85 views
1

我使用與Hibernate春數據JPA和我有以下類JPA 2.0:嵌入式繼承抽象類

@Entity 
@Table(name = "ORDER_SLIP") 
public class OrderSlip { 
    @EmbeddedId 
    OrderNumber orderNumber; 

    @Embedded 
    OrderDetails orderDetails; 
} 

@Embeddable 
public abstract class OrderDetail implements Serializable { 

    String commonOrderDetailField; 
}  

@Embeddable 
public class BuyOrderDetail extends OrderDetail implements Serializable { 

    String field1; 
    String field2; 
}   

@Embeddable 
public class SellOrderDetail extends OrderDetail implements Serializable { 

    String field3; 
    String field4; 
} 

當我運行該程序,OrderDetail類中的字段嵌入在ORDER_SLIP表。 OrderDetail(BuyOrderDetail和SellOrderDetail)這兩個子類的字段並不像我預期的那樣。

這對JPA/Hibernate來說可能嗎?

回答

0

你可以在@Embeddable類之間實現繼承。你只需要用@MappedSuperclass註釋父類。

因此,例如:

@Embeddable 
@MappedSuperclass 
public class Parent { 
    @Basic 
    private String parentProperty; 

    // ... getters/setters 
} 

@Embeddable 
public class Child extends Parent { 
    @Basic 
    private String childProperty; 

    // ... getters/setters 
} 

這樣的Hibernate(與5.x的測試)將在Child正確類都映射parentPropertychildProperty

在您的示例中,只有在OrderSlip類(不是父類型)中使用其中一個子類型時,纔可以利用繼承。

+0

OrderSlip有OrderDetail。如何知道具體的課程?它看起來像OrderSlip不能適當地創建OrderDetail的實例 –