2

为了避免 XA 开销,我在项目 A 中添加了一些表名,并将其推出到与项目 B 相同的 mysql 数据库中,这样我就可以使用相同的连接 - 并希望获得完整的原子性等。

项目 A 和 B 虽然具有非常不同的会话工厂配置。我为项目 B 配置了一个 HibernateTransactionManager,而 A 只是使用 TransactionSynchronizationManager.hasResource(sessionFactoryA) OSiV 样式代码来加入事务。

这在概念上有效吗?我只是在A中尝试了一个断点,然后等待,然后继续,超时导致B回滚,但A仍然提交!!?

是什么赋予了?谢谢你的帮助。

4

2 回答 2

2

即使两组实体都驻留在同一个数据库中,您仍然为 Spring 配置了两个不同的事务管理器。结果,您最终会得到重叠但完全独立的事务,每个事务使用不同的数据库连接。

为了使事务正常工作,您需要使用一个事务管理器,并通过它发送所有事务操作。

于 2010-01-19T22:49:57.623 回答
1

根据您当前的设置,恐怕您需要一个JtaTransactionManager(第12.2.8 节。事务管理策略)。如果要避免使用 XA,则需要使用单一且唯一的连接。

于 2010-01-20T06:59:24.597 回答