休眠:在扩展另一个被注释为 JoinedSubclass 的类的类上使用 mappedBy?

2022-09-04 02:56:35

以下情况不起作用:

@Entity
class Owner {

  @OneToMany(mappedBy="owner", cascade = {CascadeType.ALL})
  protected Set<B> getBSet() {
    ..
  }

}

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
class A {
   @ManyToOne
   public Owner getOwner() {
     ...
   }
}

@Entity
class B extends A {

}

它会导致这样的异常:org.hibernate.AnnotationException: mappedBy 引用未知的目标实体属性:所有者中的 B.user。

我试图避免将“owner”属性复制到B类中(这将“非规范化”并将所有者密钥复制到为实体A和B生成的两个表中)。另外,我真的希望将A和B放在单独的表中,而不必通过使用SingleTable继承来使用鉴别器。

另外,我无法弄清楚如何在A和B之间使用@OneToOne来做类似的事情(并且没有B扩展A)。


答案 1

这是一个冬眠的怪癖,但它是故意的。我有一篇博客文章,其中包含JOIN解决方案的背景信息,链接和解决方法。


答案 2

尝试添加目标实体 = 事务.class。当我使用SINGLE_TABLE继承时,这对我有用。我没有尝试使用JOIN。

@Entity
class Owner {

  @OneToMany(mappedBy="owner", cascade = {CascadeType.ALL}, targetEntity = Transaction.class)
  @Where(clause = "tableType='I'")
  protected Set<B> getBSet() {
    ..
  }

}

推荐