【问题标题】:How do you deep clone a persistent entity in ColdFusion ORM?如何在 ColdFusion ORM 中深度克隆持久实体?
【发布时间】:2011-11-27 09:46:48
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    上次遇到同样的情况,只是在根CFC中写了一个类似clone的方法。不能称它为clone btw,因为我相信它是保留的。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我试了一下,效果很好。要记住的一件事是它会复制所有内容,因此如果您有双向关系可以回溯到树上,您最终将复制整个数据库。最后,我选择了 Henry 的解决方案,因为我希望对复制过程进行更细粒度的控制,尽管这样做的代码要多得多。
      猜你喜欢
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-01
      • 2017-11-17
      • 2020-01-09
      • 1970-01-01
      相关资源
      最近更新 更多