多个会话工厂,一个连接?

时间:2010-01-19 19:35:59

标签: java hibernate spring sessionfactory

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

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

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

是什么给出的?谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

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

为了使交易正常运作,您需要使用一个交易管理器,并通过该交易管理器发送所有交易操作。

答案 1 :(得分:1)

根据您当前的设置,我担心您需要JtaTransactionManager12.2.8. Transaction management strategies部分)。如果您想避免使用XA,则需要使用单个且唯一的连接。