save(flush: true)
我知道如果 Grails 服务是事务性的,则可以回滚调用。我的问题是在服务期间是否需要调用flush。
问问题
1082 次
2 回答
3
这取决于工作场景。理想情况下,每次在服务类中保存内容时都不需要刷新,因为一旦从服务类返回会话就会被刷新。
但是考虑一个场景,你有两个不同的休眠会话单独工作,但来自一个的数据依赖于另一个,那么你需要刷新。
例如,会话 2 需要从 db 读取的数据经常同时被会话 1 更新,然后必须将该信息刷新到底层持久性以使其可用于会话 2。
@Transactional
如果需要,您可以通过在服务类中显式使用并指定传播/隔离策略来详细了解如何处理事务。
于 2013-08-12T14:48:27.117 回答
2
如果您正在使用 Hibernate 进行批量插入,那么您将需要定期刷新 Session 以防止OutOfMemoryException
Session 将继续增长,直到它被刷新(并清除)。刷新将在 Hibernate Session 缓存中排队的对象写入数据库(换句话说,执行 SQL 插入),但插入在 DB 事务的范围内,因此它们可以回滚。
Hibernate 文档对此主题有进一步的讨论。
于 2013-08-13T02:39:09.197 回答