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

Java 多个会话工厂,一个连接?,java,hibernate,spring,sessionfactory,Java,Hibernate,Spring,Sessionfactory,为了避免XA开销,我在项目A中添加了一些表名的前缀,并将其放在与项目B相同的mysql数据库中,这样我就可以使用相同的连接,并希望获得完整的原子性等 不过,项目A和B具有非常不同的会话工厂配置。我为项目B配置了HibernateTransactionManager,而a只使用 TransactionSynchronizationManager.hasResource(sessionFactoryA) 要与事务联接的OSiV样式代码 这在概念上有效吗?我只是在a中尝试了一个断点,然后等待,然后继续

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

不过,项目A和B具有非常不同的会话工厂配置。我为项目B配置了HibernateTransactionManager,而a只使用 TransactionSynchronizationManager.hasResource(sessionFactoryA) 要与事务联接的OSiV样式代码

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


有什么好处?感谢您的帮助。

即使两组实体位于同一个数据库中,您仍然为Spring配置了两个不同的事务管理器。因此,最终会产生重叠但完全独立的事务,每个事务使用不同的数据库连接


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

对于您当前的设置,恐怕您需要一个
JtaTransactionManager
(部分)。如果您想避免使用XA,则需要使用单一且唯一的连接。

谢谢-我意识到提供相同的数据源并不意味着使用相同的连接。一个事务就可以了(使用aop围绕B的tx方法进行搭载),但HibernateTransactionManager只管理一个工厂,因此只有一个数据源。。。因此,我必须全力以赴——而且还要有jta事务管理器和XA mysql驱动程序???要么使用jta,要么将会话工厂合并到一个配置中。我意识到需要使用相同的连接……这让我想到,提供一个自定义的hibernate.current_session_context_类,它可以查找不同的sessionFactory以返回相同的连接,怎么样?好的。hibernate.current_session_context_类不合适,但hibernate.connection.provider_类不合适!我可以实现这一点,并让getConnection“return staticSessionFactoryB.getCurrentSession().connection();”我的设置不需要内部事务等,并且默认的on_close会话的连接在tx端工作,因此一切看起来都很好。我有一个真正共享的资源。如果你看到任何叮当声,请通知我!也许这就是帕斯卡在下面提到的?