正在合并,分离同一实体的多个表示

时间:2015-12-09 13:15:27

标签: 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=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);

       }
}

我希望任何发送的实体都可以合并到db。

Hibernate通过将以下内容添加到persistence.xml

来确实为此提供了解决方案

我在jpa中可以做什么和hibernate一样。

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

我很抱歉,如果我不够清楚,这是我的第一个问题而且我真的是初学者。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

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

  

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

     

如果你正在使用CascadeType.ALL,那么请提及CascadeType.MERGE以外的所有级联类型。

答案 1 :(得分:0)

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

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

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