2011-09-29 85 views
3

我有我作爲一個模板持久實體:如何深入克隆ColdFusion ORM中的持久實體?

Company 
    Locations 
     Departments 
      Employees 

換句話說,一個Company包含許多Locations,其中包含許多Departments,其中包含許多Employees。我有一個Company設置爲模板,應該在創建新公司時複製。但是,該模板在數據庫中是持久的。我試着用下面的代碼來深入克隆它:

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

但是我收到一個錯誤,說實體沒有連接到會話。因此,我試圖在保存之前將0分配給所有ID:

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順便說一句,因爲它是保留我相信。

1

您是否嘗試過使用EntityMerge?您應該能夠複製一個ORM對象,將這些ID排除在外,然後將其合併回會話中。

+0

我給了這個嘗試,它工作得很好。要記住的一件事是,它重複了所有事情,所以如果你有雙向關係回到樹上,你將最終複製整個數據庫。最後,我選擇了亨利的解決方案,因爲我希望對複製過程進行更細緻的控制,儘管這樣做的代碼要多得多。 –