如何在 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()
}
我有一项将任务分配给操作员的服务。 在一个方法中,我在一个循环中及时分配许多任务。我想刷新任务、操作员和 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()
}