提前感谢您的帮助。
我有一个带有子对象的分离对象。我必须按顺序插入或删除子对象。所以我正在改变孩子的主键值。然后我从数据库中删除每个孩子。然后重新创建所有子对象,但是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。 可能还有一些其他有效的方法来做到这一点。任何建议!!
答案 0 :(得分:0)
我从数据库中删除了每个孩子。
你也说:
然后重新创建所有子对象
请尝试在自己的事务边界中执行这两个操作。你肯定会看到
抱怨主键已经存在
已经走了。