合并两个域对象,并在Grails中将子对象重新分配给其中的一个

|| 我要合并的域实体中有两个条目。我们将其称为“父母之屋”和“孩子之屋”。我遇到一种情况,我想合并两个实际上相同的众议院域。我有执行此顶级合并的逻辑。 但是,我想知道Grails中是否有一种方法可以轻松地说出“遍历域对象,并且在有指向House的fk指针的任何地方,将该fk更新为新值”。 该代码将是这样的
houseInst1.magicMerge(houseInst2)
这将运行House合并,并检查每个具有指向House的指针(fk)的域对象,并更新其指向houseInst2的位置(最初指向houseInst1)。 更新:一个主要功能是,如果有人添加另一个具有指向主对象链接的域对象,我希望此方法可以正常工作。例如。如果以后有人添加抵押贷款,我不想更新所有合并逻辑,那么它应该去发现抵押贷款是House的孩子,然后进行相应的更新。     
已邀请:
        Grails域对象公开了休眠的
merge()
方法,但这做了一些完全不同的事情:它将一个(可能是分离的)对象合并回到持久化上下文中。 我不知道任何内置功能可以像您所描述的那样合并两个对象。我认为您需要像Gregg的答案中一样手动更新外键。进行更新的更有效方法是通过HQL,如下所示:
Room.executeUpdate(\'update Room set house = :newHouse where house = :oldHouse\',
    [newHouse: newHouse, oldHouse: oldHouse])
编辑:要自动更新所有关联,可以询问人工制品:
def artefact = grailsApplication.getArtefact(\"Domain\", \"House\")
artefact.associationMap.values().each { associationClass ->
    associationClass.executeUpdate(\"update ${associationClass.simpleName} set house = :newHouse where house = :oldHouse\",
        [newHouse: newHouse, oldHouse: oldHouse])
}
    
        这样的事情怎么样?在摆脱旧房子之前,您需要这样做。
Room.findAllByHouse(oldHouse).each { room ->
    room.house = newHouse
    room.save()
}
我还没有尝试过,我假设房屋和房间之间有一个非常标准的OneToMany关系。     

要回复问题请先登录注册