2015-04-22 128 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的实例 –