Java JPA如何为实体实施OneOnOne关系?
我有以下伪实体Java JPA如何为实体实施OneOnOne关系?,java,jpa,eclipselink,one-to-one,Java,Jpa,Eclipselink,One To One,我有以下伪实体 public class Child { @OneToOne(fetch=FetchType.LAZY) @JoinColumn(name="PARENT_ID") private Parent parent; } public class Parent { @OneToOne(fetch=FetchType.LAZY, mappedBy="parent",cascade=CascadeType.ALL) private Child
public class Child {
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name="PARENT_ID")
private Parent parent;
}
public class Parent {
@OneToOne(fetch=FetchType.LAZY, mappedBy="parent",cascade=CascadeType.ALL)
private Child child;
}
数据库:
PARENT
PARENT_ID, PARENT_NAME
1 , "John"
2 , "Bob"
CHILD
ID, PARENT_ID
1 , 1
2 , 2
现在我从数据库中加载父1,并相应地得到子1。但随后我将child1parent设置为parent2并提交更改。子1的父ID更改为2,但子2仍具有父ID 2。所以DB看起来像这样:
CHILD
ID, PARENT_ID
1 , 2
2 , 2
考虑到OneTONE关系,JPA是否有办法检测父2已被重新分配给子1并使子2的父项为空
运行EclipseLink因为子1仍然引用父1,哪个是“正确的”?如果需要Child1引用null或其他父级,则这些决定将留给应用程序逻辑。您可以通过将parent_ID设置为具有唯一约束来防止两者都引用同一父实体。我曾希望通过相同的方式,孤儿删除将删除子行,即使您没有专门调用它,但当您将父实体指定给新实体时,OneOnOne知道有一种方法可以从旧子实体中删除引用one.EJB1.0尝试了这一点,它导致了更多的问题,然后解决了(IMO)。JPA简化了一些事情,这样其他一些事情(可能是延迟抓取)实体就是POJO,只做您让它们做的事情。