如何在 Grails GORM 中强制刷新

How to force flushing in Grails GORM

我有一项将任务分配给操作员的服务。 在一个方法中,我在一个循环中及时分配许多任务。我想刷新任务、操作员和 DistributionLog。如果我只有一个域要保存,我想我可以做类似

的事情
Operator.withTransaction{ //...some code }

但我至少有 3 个域需要保存,更糟糕的是,其中两个域相互依赖。操作员有任务列表。

我迫不及待地等待所有分发完成,然后操作员才能得到他的任务,所以我必须强制它刷新。更难的是,它都在 multitenantService.doWithTenant() (多租户插件)

您可以使用 flush 参数强制刷新最后一次调用 save:

obj.save flush:true

查看文档:

http://grails.github.io/grails-doc/2.2.5/ref/Domain%20Classes/save.html

The save method informs the persistence context that an instance should be saved or updated. The object will not be persisted immediately unless the flush argument is used:

b.save(flush: true)

如果您想进行显式刷新,您可以像这样在您的 grails 服务中获取对休眠会话工厂的引用:

def sessionFactory

然后您可以获得当前的休眠会话,并对其调用刷新:

sessionFactory.currentSession.flush()

您可以使用所有域 类 中可用的 withSession 方法获取会话,并在其上调用 flush()

Operator.withSession { session ->
   // ...
   session.flush()
}