我的问题与这里的问题基本相同,但我对答案不满意,所以我正在写这个问题。
在 Spring Framework 手册中指出,对于 PROPAGATION_REQUIRES_NEW,当前事务将被暂停。这实际上是如何实现的?我知道大多数数据库不支持嵌套事务,并且只能在一个连接中运行一个事务。这意味着您不能只是“不使用”原始事务并开始新事务 - 在开始新事务之前,您必须提交或回滚原始事务。
例子:
START TRANSACTION
SELECT ...
UPDATE ...
-- Now we run method with PROPAGATION_REQUIRES_NEW
-- How do we "suspend" transaction so we can start new one?
START TRANSACTION
UPDATE ...
COMMIT
-- We returned from the method, result was commited
-- Now we'd like to "unsuspend" the original transaction so it can be commited/rollbacked, but how?
或者这可能使用另一个连接(会话对象)实现?这样我们就可以停止使用原始连接并创建一个可以开始新事务的新连接?
我在这里遗漏了一些如此明显的东西,以至于没有人愿意解释它(至少在 Spring 文档、Spring in Action、Spring 与 Hibernate 的持久性中没有)。
非常感谢!