当同一方法中存在另一个具有相同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()
附带说明一下,如果唯一的原因是比较实例中属性的旧值和新值,则可以在刷新实例之前使用
dirtyPropertyNames
和getPersistentValue()
,如下所示: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]
]
}