grails - 告诉我有什么东西是脏的吗?

Ray*_*Ray 8 grails groovy grails-orm

Grails提供了一个可以在域对象上调用的isDirty方法.如何修改Grails域模型系统,以便可以简单地调用方法,以查明是否有任何域对象是脏的.

我正在努力解决一些我未能确定的"未保存的瞬态实例"错误,并且知道什么是脏的很好.有一种优雅的方式来做这个与groovy?

Bur*_*ith 11

将其添加到BootStrap.groovy:

import org.hibernate.Session

Session.metaClass.isDirty = { ->
   delegate.persistenceContext.entitiesByKey.values().any { it.isDirty() }
}
Run Code Online (Sandbox Code Playgroud)

isDirty()为Hibernate会话添加了一种方法,用于检查集合中的顶级实例或实例是否为脏,您可以使用它withSession,例如

boolean dirty = SomeDomainClass.withSession { session -> session.isDirty() }
Run Code Online (Sandbox Code Playgroud)

或者如果你有权访问sessionFactorybean(例如从def sessionFactory依赖注入)

boolean dirty = sessionFactory.currentSession.isDirty()
Run Code Online (Sandbox Code Playgroud)