以下不起作用:
@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)。
答案 0 :(得分:10)
这是一个Hibernate古怪,但它是故意的。我有一个blog post的背景信息,链接以及JOINED解决方案的解决方法。
答案 1 :(得分:6)
尝试添加targetEntity = Transaction.class。当我使用SINGLE_TABLE继承时,这对我有用。我没有尝试加入。
@Entity
class Owner {
@OneToMany(mappedBy="owner", cascade = {CascadeType.ALL}, targetEntity = Transaction.class)
@Where(clause = "tableType='I'")
protected Set<B> getBSet() {
..
}
}
答案 2 :(得分:0)
我会仔细检查你的实际执行情况。我使用了您的示例代码,在添加@Id之后,所有内容都按预期工作。甚至IntelliJ也说getBSet()与B.owner相关联。