hibernate - 在 grails 中获取分离的域实体

标签 hibernate grails grails-orm detach

当同一方法中存在相同 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()

顺便说一句,如果唯一的原因是比较实例中属性的新旧值,那么您可以使用 dirtyPropertyNamesgetPersistentValue() < 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/

相关文章:

java - 使用 spring data jpa 存储库在 Hql 查询后刷新()

mysql - 使用JPA(hibernate)VS存储过程

unit-testing - Grails 单元测试服务 MissingProperty 'log'

grails - 多个 when/then 与 where for each other

grails - grails:如何在 Bootstrap 中保存域对象并通过忽略唯一约束错误来避免重复?

java - Hibernate如何实现代理对象?

java - Hibernate 通过关联表检索对象?

grails - 配置 grails 来创建数据库(如果数据库不存在)。

grails 将 gorm 子查询动态添加到现有查询中

mysql - 如何在 GORM 表架构更改后让系统正常工作?