qbd*_*qbd 8 java mysql spring hibernate transactions
我的问题与此基本相同,但我对答案不满意所以我正在写这个问题.
在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?
Run Code Online (Sandbox Code Playgroud)
或者这可能是使用另一个连接(会话对象)实现的?这样我们就可以停止使用原始连接并创建一个可以开始新事务的新连接?
我在这里遗漏了一些显而易见的事情,没有人愿意解释它(至少在Spring文档,Spring in Action,Spring持久化Hibernate中).
非常感谢!
小智 9
暂停事务的目的是将线程的当前事务更改为新事务.这不符合嵌套事务的语义,因为新事务和挂起事务完全相互独立.没有连接级API来支持挂起事务,因此必须使用不同的连接来完成.如果您在Spring中使用JTA,则由JTA事务管理器完成.如果您正在使用DataSourceTransactionManager,您可以查看代码并查看它将作为"暂停资源"保存当前连接,并从新事务的数据源中获取新连接.
| 归档时间: |
|
| 查看次数: |
3663 次 |
| 最近记录: |