JPA分离对象和主键

时间:2016-06-04 07:42:57

标签: java jpa eclipselink

提前感谢您的帮助。

我有一个带有子对象的分离对象。我必须按顺序插入或删除子对象。所以我正在改变孩子的主键值。然后我从数据库中删除每个孩子。然后重新创建所有子对象,但是eclipselink正在抱怨已存在的主键无法更新数据库 这是我的代码

Quotation q = ejbFacade.find(selected.getQuotationPK());
    for (QTitle qt : q.getQTitleList()) {
        for (QActivity qa : qt.getQActivityList()) {
            for (QCategorywork qc : qa.getQCategoryworkList()) {
                for (QManual qm : qc.getQManualList()) {
                    qmFacade.remove(qm);
                }
                for (QProduct qp : qc.getQProductList()) {
                    qpFacade.remove(qp);
                }
                qcFacade.remove(qc);
            }
            qaFacade.remove(qa);
        }
        qtFacade.remove(qt);
    }
    for (QTitle qt : selected.getQTitleList()) {
        qtFacade.create(qt);
        for (QActivity qa : qt.getQActivityList()) {
            qaFacade.create(qa);
            for (QCategorywork qc : qa.getQCategoryworkList()) {
                qcFacade.create(qc);
                for (QManual qm : qc.getQManualList()) {
                    qmFacade.create(qm);
                }
                for (QProduct qp : qc.getQProductList()) {
                    qpFacade.create(qp);
                }
            }
        }
    }
    ejbFacade.merge(selected);
    ejbFacade.refresh(selected);

所选对象已分离,所有子级都有cascadetype.all set。 可能还有一些其他有效的方法来做到这一点。任何建议!!

1 个答案:

答案 0 :(得分:0)

你说:

  

我从数据库中删除了每个孩子。

你也说:

  

然后重新创建所有子对象

请尝试在自己的事务边界中执行这两个操作。你肯定会看到

  

抱怨主键已经存在

已经走了。