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

2024-01-07

我有一个持久实体用作模板:

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...

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


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 ColdFusion ORM 中深度克隆持久实体? 的相关文章

随机推荐