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
Jpa 正在合并、分离或删除同一实体的多个表示_Jpa_Jpa 2.0 - Fatal编程技术网

Jpa 正在合并、分离或删除同一实体的多个表示

Jpa 正在合并、分离或删除同一实体的多个表示,jpa,jpa-2.0,Jpa,Jpa 2.0,我在尝试使用jpa2.0将包含持久实体和分离实体(新创建的实体)的实体列表更新到我的数据库时出错。 “我的实体”包含在合并数据时出现错误(标题中提到)的内部实体: Class superclass{ private A a; private string name; //getter setters here... } Class A{ private long id; @onetoone(cascade=CascadeType.All, fetch=

我在尝试使用jpa2.0将包含持久实体和分离实体(新创建的实体)的实体列表更新到我的数据库时出错。 “我的实体”包含在合并数据时出现错误(标题中提到)的内部实体:

Class superclass{
    private A a;
    private string name;

    //getter setters here...
}

Class A{
    private long id;
    @onetoone(cascade=CascadeType.All, fetch=FetchType.Eager)
     private B b;
    @onetoone(cascade=CascadeType.All, fetch=FetchType.Eager)
    private C c;

    //getter setters here...

}


Class Dao{

    daoInsert(superclass x){

    em.merge(x);

       }
}
我希望为持久化发送的任何实体都合并到数据库中

Hibernate通过向persistence.xml添加以下内容提供了解决方案

我可以在jpa中做一些与hibernate相同的事情吗

请不要建议使用em.find()查找实体,然后手动更新,因为我需要两个实体—持久化实体和新创建的实体。 我还使用spring表单将整个专利实体持久化到db中

对不起,如果我不够清楚,这是我的第一个问题,我真的是一个初学者


非常感谢您的帮助。

今天我自己找到了问题的答案。您只需要

从不允许保留分离实体的实体中删除CascadeType.MERGE

如果您使用的是CascadeType.ALL,请提及CascadeType.MERGE以外的所有cascade类型


现在,从级联中删除CascadeType.MERGE是一种解决方案,但不是最佳解决方案,因为从级联中删除MERGE后,将永远无法更新映射对象

如果要将分离的实体与Hibernate合并,请在合并实体之前清除实体管理器

entityManager.clear();
//perform modification on object
entityManager.merge(object);

我们需要更多的信息,因为您还没有描述导致问题的确切原因。不应该让我们猜测您是否调用daoInsert以及调用什么,以及导致问题的实体是否是A、B或C实例。您得到异常的具体情况是什么?为什么您的模型或列表中有同一实体的多个分离实例?@Chris导致问题的实体是b和c,只有当c中的属性值在下一个条目中重复时,我才得到错误。。。我提到的hibernate链接正是我在jpa中遇到的问题。。。此外,我正在调用DaoInsert合并我的实体列表,即如果存在具有匹配id的实体,则应更新该实体,如果未找到匹配id,则必须在数据库中创建新条目。这么多信息行吗?我有什么遗漏吗。。。有人能帮我吗???这还没有描述你是如何在HHH-9106中解决这个问题的。您的模型显示A->B和A->C。HHH-9106需要类似A1->B1->A1'的东西。虽然B和C可能与您的问题有关,但您没有显示足够的模型或情况来推断您正在使用HHH-9106,并且您没有说明为什么您会获得同一实体的多个不同实例。您可能会更好地了解为什么您周围有一个实体的多个分离实例,因为这似乎效率低下,而且不清楚哪些可能包含应该捕获的更改。我喜欢这些深奥的东西。谢谢你回答你的问题。(是的,我是在讽刺密宗部分)。你能举例说明你的意思吗?假设您使用的是CascadeType.ALL。你怎么会“提到所有级联类型而不是级联类型。合并”你的意思是特别列出除合并之外的所有级联类型吗?@Jolley71717是的,这正是我的意思。在数组中列出所有其他级联类型。