小编典典

使用注释在Hibernate中映射多级继承

hibernate

考虑此问题中列出的情况:

在Hibernate中映射多级继承

如何使用注释而不是hbm文件完成此映射?


阅读 287

收藏
2020-06-20

共1个答案

小编典典

您具体遇到什么问题?通过联接的子类映射类层次结构非常简单:

@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的评论)。

如果您确实要使用区分符(并且您应该有 充分的
理由这样做),则可以通过将基于类的策略辅助表进行混合来实现:

@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;

  ...
}
2020-06-20