2016-06-04 4 views
0

미리 도움을 청하십시오.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 가지고있다. 위와 같은 작업을 수행하는 다른 효율적인 방법이있을 수 있습니다. 어떤 충고!!

+0

자녀의 기본 키 값을 변경할 때 의미하는 바를 보여주십시오. 정확한 예외와 스택은 무엇입니까? 아래 제시된 대답과 같이 JPA는 기본 키를 변경할 수 없기 때문에 이러한 작업은 자체 트랜잭션에서 완전히 격리되어야합니다. 새로운 엔티티를 삽입한다고해서 참조를 유지하거나 필요에 따라 캐싱한다는 의미가 아닙니다. 에. 변경 추적에서 외부 키 변경을 고려하지 않을 수 있으므로 수정 된 getQTitleList 목록을 읽은 인용에 추가 할 수 있습니다. – Chris

답변

0

는 말 :

내가 데이터베이스에서 모든 어린이를 제거합니다.

는 당신은 또한 말 :

는 모든 아이가

자신의 트랜잭션 경계에서 두 작업을 실행 해보세요 개체를 다시 작성하십시오. 당신은 반드시 이미

이 간 존재하는

이 기본 키에 대해 불평 볼 수 있습니다.

+0

하위 데이터베이스가 데이터베이스에서 올바르게 다시 작성됩니다. 부모 개체를 편집하려고 할 때 문제가 발생합니다. –