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()

08-28 22:58