如何在Grails GORM中强行冲洗

时间:2015-05-27 15:33:08

标签: grails transactions flush

我有一项服务可以将任务分配给运营商。 在方法内部,我在循环内及时分发了许多任务。我想刷新任务,操作员和DistributionLog。如果我只有一个域名可以保存,我想我可以做一些像

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

但我至少要保存3个域名并使其更糟糕,其中两个域名彼此依赖。操作员有一个任务列表。

在操作员完成任务之前,我不能等待所有的分配完成,因此我必须强制它进行冲洗。为了使它更难,它都在multitenantService.doWithTenant()(多租户插件)中

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

obj.save flush:true

答案 2 :(得分:0)

参见文档:

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)

答案 3 :(得分:0)

如果要进行显式刷新,可以在grails服务中获得对hibernate会话工厂的引用,如下所示:

def sessionFactory

然后,您可以获取当前的休眠会话,并在其上调用flush:

sessionFactory.currentSession.flush()