我正在使用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来说是否可行?
答案 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
类中正确映射childProperty
和Child
。
在您的示例中,只有在OrderSlip类中使用其中一个子类型(而不是父类型)时,才能利用继承。