假设我有以下代码:
public void doSomething() {
// begin transaction
// do stuff 1
...
// update a row which must be committed now
...
// do stuff 2
...
// commit transaction
}
我在一种方法中保留了大量的数据库工作,以简化伪代码。但是,基本上我有一系列数据库工作,直到最后我都不想提交。在上面的事务中间,我需要提交一些内容而不提交事务的其余部分。如何在不影响交易的其余部分的情况下完成一小部分工作?
答案 0 :(得分:2)
通常只需抓住另一个连接并在其他数据库连接上执行工作即可完成此操作。您可能需要或可能不需要管理数据库隔离级别以获得所需的可见性。这是例如Propagation.REQUIRES_NEW
在Spring中的工作方式。 (编辑:一个注释你标记了问题Hibernate。基本上,你创建一个全新的会话/实体管理器并与那个单独的工作。这将有一些可能意外的结果跨越边界的对象状态。如果你从一个加载的东西会话并尝试继续使用它跨越边界,它可能会爆炸你。你需要小心正确管理它并跟踪哪个会话管理的内容。)