当同一方法中存在另一个具有相同ID的域实体时,我想获得处于分离状态的grails中的域实体。

我遵循此How do you disconnect an object from it's hibernate session in grails?作为在grails中获取独立域实体的方法。

def id = 23L;
def userInstance = User.get(id)
def oldInstance = User.get(id).discard()

userInstance.properties = params

userInstace.save(flush:true)

// Now, I want to compare properties of oldInstance and userInstance
// But I get null for oldInstance

那么,如何才能详细了解域实体,使其脱离gorm session 呢?

最佳答案

discard不返回实例本身。它不返回任何值(无效),但逐出该对象在将来变得持久。用作:

def oldInstance = User.get(id)
oldInstance.discard()

附带说明一下,如果唯一的原因是比较实例中属性的旧值和新值,则可以在刷新实例之前使用dirtyPropertyNamesgetPersistentValue(),如下所示:
userInstance.properties = params

userInstance.dirtyPropertyNames?.each { name ->
    def originalValue = userInstance.getPersistentValue( name )
    def newValue = userInstance.name
}

//Or groovier way
userInstance.dirtyPropertyNames?.collect {
    [
        (it) : [oldValue: userInstance.getPersistentValue( it ),
                newValue: userInstance.it]
    ]
}

09-08 07:28