2011-09-29 3 views
3

템플릿으로 사용하는 영구적 인 엔티티가 있습니다.ColdFusion ORM에서 영구 객체를 어떻게 복제합니까?

Company 
    Locations 
     Departments 
      Employees 

즉, Company에는 많은 Departments이 포함되어있는 많은 Locations이 포함되어 있습니다. 새 회사를 만들 때 복사해야하는 템플릿으로 Company을 하나 설정했습니다. 그러나이 템플리트는 데이터베이스에 지속됩니다. 나는 그것을 깊게 복제하기 위해 다음의 코드를 사용했다.

var template = EntityLoadByPK("Company", 13); 
var company = Duplicate(template); 
EntitySave(company); 

그러나 엔티티가 세션에 연결되어 있지 않다는 오류 메시지가 나타납니다. 그래서 저장하기 전에 모든 ID에 0을 할당하려고했습니다.

company.setId(0); 
for (location in company.getLocations()) 
{ 
    location.setId(0); 
    // more nested for loops 
} 

그러나 비슷한 오류가 발생합니다. 마지막으로, 프로퍼티의 직접 1 : 1 복사본을 만들려고했습니다.

var newCompany = EntityNew("Company"); 
newCompany.setName(company.getName()); 
newCompany.setCEO(company.getCEO()); 
// etc... 

하지만 오브젝트 그래프가 깊어 질수록 더 복잡해집니다. 영속 엔티티를 딥 복제하는 더 쉬운 방법이 있나요? 그래서 모든 하위 컬렉션을 포함하여 새로운 과도기 엔티티를 얻을 수 있습니까?

답변

1

지난 번에 동일한 상황이 발생했습니다. 루트 CFC에서 클론과 유사한 메소드를 작성했습니다. clone btw로 전화 할 수 없습니다.

1

EntityMerge을 사용해 보셨나요? ORM 개체를 복제하고 ID를 NULL로 채운 다음 다시 세션에 병합 할 수 있어야합니다.

+0

나는 이것을 시험해 보았고 꽤 잘 돌아갔다. 한 가지 명심해야 할 것은 모든 것이 중복되므로 트리를 백업하는 양방향 관계가 있으면 전체 데이터베이스를 복제하게됩니다. 결국 헨리의 솔루션을 따라 갔다. 복제 프로세스에 대한 세분화 된 제어를 원했기 때문이다. –

관련 문제