Grails提供了可以在域对象上调用的isDirty method。人们将如何修改Grails域模型系统,以便可以简单地调用一种方法,以查明是否有任何域对象是脏的。
我正在努力解决一些无法确定的“未保存的瞬态实例”错误,很高兴知道什么是肮脏的。有没有一种时髦的方法可以做到这一点?
最佳答案
将此添加到BootStrap.groovy:
import org.hibernate.Session
Session.metaClass.isDirty = { ->
delegate.persistenceContext.entitiesByKey.values().any { it.isDirty() }
}
这会在Hibernate session 中添加
isDirty()
方法,以检查顶级实例或集合中的实例是否脏了,您可以将其与withSession
一起使用,例如boolean dirty = SomeDomainClass.withSession { session -> session.isDirty() }
或者您有权访问
sessionFactory
Bean(例如,通过def sessionFactory
依赖项注入(inject))boolean dirty = sessionFactory.currentSession.isDirty()