Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA如何为实体实施OneOnOne关系?_Java_Jpa_Eclipselink_One To One - Fatal编程技术网

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,只做您让它们做的事情。