Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.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 org.hibernate.ObjectDeletedException:已删除的实例传递给合并_Java_Hibernate_Jpa - Fatal编程技术网

Java org.hibernate.ObjectDeletedException:已删除的实例传递给合并

Java org.hibernate.ObjectDeletedException:已删除的实例传递给合并,java,hibernate,jpa,Java,Hibernate,Jpa,这是我的删除方法: public void removeIletisimAdresi(Integer index){ getUser().getIletisimBilgileri().remove(getUser().getIletisimBilgileri().get(index)) } 这是我的父母关系 所以,如果我调用remove方法并像entityManager.merge(user)那样更新父对象,它会抛出如下异常: 原因:org.hib

这是我的删除方法:

public void removeIletisimAdresi(Integer index){
              getUser().getIletisimBilgileri().remove(getUser().getIletisimBilgileri().get(index))
        }
这是我的父母关系

所以,如果我调用remove方法并像entityManager.merge(user)那样更新父对象,它会抛出如下异常:

原因:org.hibernate.ObjectDeletedException:已删除的实例传递给merge:[com.medikalborsasi.model.IletisimBilgileri#]


您能解释并帮助我如何解决此问题吗?

在删除实体之前,此实体必须处于管理状态。我们可以使用一些函数
合并
查找
,等等。注意:关闭
实体管理器
后,其所有实体都将分离

public void remove(Person p) {
    Perosn p2 = em.merge(p);
    em.remove(p2);
}

我认为问题只存在于代码中

getUser().getIletisimBilgileri().remove(getUser().getIletisimBilgileri().get(index))
映射的方式必须确保,如果从hibernate中删除一个实体,将导致从其他依赖实体中删除同一实体。 例如:

应从A中的列表中删除b的参考。 您不必从A中的列表中明确删除B的引用。 所以按照你的方法你在做什么

getA().getListOfB.remove(getA().getListOfB().get(someIndex));
我希望这个小例子能澄清你的问题

getUser().getIletisimBilgileri().remove(getUser().getIletisimBilgileri().get(index))
Class A
{
     /* List of B entity(child) */
     List<B> listOfB;

}

Class B
{
     /* reference of A(parent) */
     A a;
}
hibernateSession.delete(b);
getA().getListOfB.remove(getA().getListOfB().get(someIndex));