eva*_*ard 5 inheritance hibernate
请考虑此问题中列出的情况:
如何使用Annotations而不是hbm文件完成此映射?
Chs*_*y76 10
你有什么特别的麻烦?通过连接的子类映射类层次结构非常简单:
@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 { ... }
Run Code Online (Sandbox Code Playgroud)
更新(根据Michal的评论).
如果您确实想使用鉴别器(并且您应该有充分的理由这样做),可以通过将每个类的层次结构策略与辅助表混合来实现:
@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 { ... }
Run Code Online (Sandbox Code Playgroud)
这种方法的缺点是你必须为映射的每个属性显式指定表:
public class D extends B {
@Column(table="D_table")
private String someProperty;
...
}
Run Code Online (Sandbox Code Playgroud)