你如何深度克隆ColdFusion ORM中的持久实体?

时间:2011-09-29 05:10:51

标签: hibernate orm coldfusion coldfusion-9 deep-copy

我有一个持久性实体,我将其用作模板:

Company
    Locations
        Departments
            Employees

换句话说,Company包含许多Locations,其中包含许多Departments,其中包含许多Employees。我有一个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...

但是,对象图越深入,这就变得越来越麻烦。是否有更简单的方法来深入克隆持久性实体,以便获得一个全新的瞬态实体,包括其所有子集合?

2 个答案:

答案 0 :(得分:1)

上次我遇到同样的情况时,我只是在根CFC中编写了类似克隆的方法。不能称之为clone顺便说一句,因为它保留了我相信。

答案 1 :(得分:1)

您是否尝试过使用EntityMerge?您应该能够复制ORM对象,将ID清空,然后将其合并回会话。