Как вы глубоко клонируете постоянную сущность в ColdFusion ORM? - PullRequest
3 голосов
/ 29 сентября 2011

У меня есть постоянная сущность, которую я использую в качестве шаблона:

Company
    Locations
        Departments
            Employees

Другими словами, Company содержит множество Locations, которое содержит множество Departments, которое содержит множество Employees. У меня есть один Company, настроенный как шаблон, который должен быть скопирован при создании новой компании. Тем не менее, этот шаблон является постоянным в базе данных. Я попытался использовать следующий код для его глубокого клонирования:

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

Но я получаю сообщение об ошибке, в котором говорится, что объект не присоединен к сеансу Затем я попытался присвоить 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 ]

1 голос
/ 29 сентября 2011

Вы пробовали использовать EntityMerge?Вы должны иметь возможность дублировать объект ORM, обнулять идентификаторы, а затем объединить его обратно в сеанс.

1 голос
/ 29 сентября 2011

В прошлый раз, когда я столкнулся с такой же ситуацией, я только что написал клоноподобный метод в корневом CFC.Не могу назвать это clone кстати, потому что это зарезервировано, я верю.

...