미리 도움을 청하십시오.JPA 분리 객체 및 기본 키
나는 자식 개체가있는 분리 개체가 있습니다. 순서대로 하위 개체를 삽입하거나 삭제해야합니다. 그래서 나는 자식의 기본 키 값을 변경하려고합니다. 그런 다음 데이터베이스에서 모든 하위 항목을 제거합니다. 그리고 이미 데이터베이스 를 업데이트 할 수있는 모든 자식 개체를 다시하지만 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 가지고있다. 위와 같은 작업을 수행하는 다른 효율적인 방법이있을 수 있습니다. 어떤 충고!!
자녀의 기본 키 값을 변경할 때 의미하는 바를 보여주십시오. 정확한 예외와 스택은 무엇입니까? 아래 제시된 대답과 같이 JPA는 기본 키를 변경할 수 없기 때문에 이러한 작업은 자체 트랜잭션에서 완전히 격리되어야합니다. 새로운 엔티티를 삽입한다고해서 참조를 유지하거나 필요에 따라 캐싱한다는 의미가 아닙니다. 에. 변경 추적에서 외부 키 변경을 고려하지 않을 수 있으므로 수정 된 getQTitleList 목록을 읽은 인용에 추가 할 수 있습니다. – Chris