HibernateTransactionManager(Spring)具有多个Session Factories

时间:2009-01-02 17:29:28

标签: java hibernate spring transactions

我有一个DAO实现,它使用HibernateTransactionManager进行事务管理,应用程序有2个会话工厂。我在下面的transactionManager.commit()行中得到一个例外。 在与不同会话工厂相关的事务管理器中执行Hibernate操作会导致问题吗?

TransactionStatus status = transactionManager.getTransaction(def);
try{
    doHibernateStuff1();  //Does Hibernate stuff with session
                          //factory related to Tx Manager
    doHibernateStuff2();  //Does Hibernate stuff with session 
                          //factory not related to Tx Manager
}
catch(DataAccessException){
 transactionManager.rollback(status);
}
transactionManager.commit(status); //Exception happens here.

异常似乎是试图在doHibernateStuff2();中再次执行txManager.commit()中的操作。

如果你想建议一个kludge和/或正确的处理方法,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

您是否使用XA驱动程序连接到交易中涉及的两个数据源?否则无法工作。

答案 1 :(得分:0)

我知道这是一个老问题,但我遇到了类似的问题。我认为Brandon对不同的数据源 2个会话工厂,并且他正在使用 HibernateTransactionManager 。我相信使用这样的经理是个问题。据我所知,HibernateTransactionManager无法与2个不同的会话工厂一起工作。相反,他应该使用像JTA事务管理器这样的不同经理。但只有当他需要在一个事务中访问两个数据源时。否则,解决方案应该为每个会话工厂使用额外的管理器,如下面的链接中所述:

similar problem