休眠继承联接 + 每个类的表



我有这个奇怪的层次结构:

  • A 是抽象的(但它是一个实体)
  • B(抽象)和C都扩展了类A(TABLE_PER_CLASS)。
  • B 也由类 DE 扩展,但这次它是 JOINED。

我希望A类的ID是所有其他类的ID

这能做到吗?

我收到奇怪的ID错误。 谁能告诉我如何映射?

我是这样做的:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class A {
      @Id
        @GeneratedValue(strategy = GenerationType.TABLE)
    protected Integer id;
}

C类:

@Entity
@Table(name = "managers")
public class C extends A {

B类:

@Entity
@Table(name = "bb")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.STRING)
public abstract class B extends A {

C,D类:

@Entity
@Table(name = "cc"/"dd")
@DiscriminatorValue("CC"/"DD")
public class C (or D) extends B {

虽然在继承树中混合继承策略可以完成(https://stackoverflow.com/a/3916998/131929 指的是 Java Persistence with Hibernate(英语:Java Persistence with Hibernate)-> 5.1.5 混合继承策略(p207-p210)) 我和我认识的其他人都建议不要这样做。

旁注,我建议您始终使用@MappedSuperclass而不是@Entity抽象类。

最新更新