最佳答案
您具体遇到了什么问题?映射类层次结构via joined subclasses非常简单:
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class A implements Serializable { ... }
@Entity
public class B extends A { ... }
@Entity
@PrimaryKeyJoinColumn(name="A_ID")
public class C extends A { ... }
@Entity
@PrimaryKeyJoinColumn(name="B_ID")
public class D extends B { ... }
<小时/>
更新(基于 Michal 的评论)。
如果您确实想使用鉴别器(并且您应该有一个充分理由这样做),可以通过混合 table-per-class-hierarchy strategy 来实现。与 secondary tables :
@Entity
@Table(name="A_table")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="entity_type")
@DiscriminatorValue("A")
public class A implements Serializable { ... }
@Entity
@SecondaryTable(name="B_table")
public class B extends A { ... }
@Entity
@SecondaryTable(name="C_table", pkJoinColumns={
@PrimaryKeyJoinColumn(name="A_ID", referencedColumnName="ID")
))
public class C extends A { ... }
@Entity
@SecondaryTable(name="D_table", pkJoinColumns={
@PrimaryKeyJoinColumn(name="B_ID", referencedColumnName="ID")
))
public class D extends B { ... }
这种方法的缺点是您必须为每个映射的属性显式指定表:
public class D extends B {
@Column(table="D_table")
private String someProperty;
...
}
关于hibernate - 使用注解映射 Hibernate 中的多级继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1883841/