当同一方法中存在相同 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
那么,如何详细获取 grails 中的域实体,使其与 gorm session 分离?
最佳答案
discard
不返回实例本身。它不返回任何内容(void),但会逐出将来持久化的对象。将其用作:
def oldInstance = User.get(id)
oldInstance.discard()
顺便说一句,如果唯一的原因是比较实例中属性的新旧值,那么您可以使用 dirtyPropertyNames
和 getPersistentValue()
< em>在刷新实例之前如下:
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]
]
}
关于hibernate - 在 grails 中获取分离的域实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23600922/