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

Gre*_*nie 14 java hibernate jpa

以下不起作用:

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

}
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 10

这是一个Hibernate古怪,但它是故意的.我有一篇博客文章,其中包含JOINED解决方案的背景信息,链接和解决方法.


Tre*_*red 6

尝试添加targetEntity = Transaction.class.当我使用SINGLE_TABLE继承时,这对我有用.我没有尝试JOIN.

@Entity
class Owner {

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

}
Run Code Online (Sandbox Code Playgroud)


dan*_*nez 0

我会仔细检查你的实际实施情况。我使用了您的示例代码,添加 @Id 后一切都按预期工作。甚至 IntelliJ 也说 getBSet() 与 B.owner 相关联。