JPA 2.0:嵌入式继承抽象类

时间:2015-04-22 05:44:53

标签: java hibernate jpa

我正在使用Spring Data JPA和Hibernate,我有以下类

@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来说是否可行?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

您可以在@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测试)将在parentProperty类中正确映射childPropertyChild

在您的示例中,只有在OrderSlip类中使用其中一个子类型(而不是父类型)时,才能利用继承。