所以我试过的似乎没什么用。我想有这样的事情:
class A {
B foo;
B bar;
}
class B {
A baz;
}
我在A班尝试的内容如下:
@OneToOne(targetEntity = B.class)
@JoinColumn(name = "foo_id")
@Cascade(CascadeType.ALL)
public B getFoo() {
return foo;
}
@OneToOne(targetEntity = B.class)
@JoinColumn(name = "bar_id")
@Cascade(CascadeType.ALL)
public B getBar() {
return bar;
}
似乎不起作用。我总是在foo_id和bar_id相同的地方结束,原因我不明白。
因此,当我在我的数据库中检查表“A”以获取id为1的行时,我希望:
foo_id = 1
bar_id = 2
并且在表B中,我应该有2个id为1和2的实体,其中两个都有baz_id = 1;
答案 0 :(得分:2)
baz_id打算成为FK回A吗?因为我认为在这种情况下数据库映射到模型是错误的。您已经建立了从B的PK到A.foo_id或A.bar_id的FK关系。
同样要小心这种关系的级联规则。 SQL Server将拒绝两个FK到同一个表,除非用于级联的DB操作是"没有操作"。
我碰巧知道你在JPA中尝试做的事情是可能的,因为我最近刚刚在一个实体上做过:
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
@JoinColumn(name = "portal_logo_id", referencedColumnName = "id", nullable = true)
private PortalResourceModel logo;
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
@JoinColumn(name = "portal_favicon_id", referencedColumnName = "id", nullable = true)
private PortalResourceModel favicon;
我还没有在PortalResourceModel中为徽标或图标提供映射,因为关系的这一方面并不知道 的使用方式。而且我不能拥有从拥有方的多个关系到mappedBy方的单个关系的通用映射。