我有一个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和/或正确的处理方法,我将不胜感激。
答案 0 :(得分:2)
您是否使用XA驱动程序连接到交易中涉及的两个数据源?否则无法工作。
答案 1 :(得分:0)
我知道这是一个老问题,但我遇到了类似的问题。我认为Brandon对不同的数据源有 2个会话工厂,并且他正在使用 HibernateTransactionManager 。我相信使用这样的经理是个问题。据我所知,HibernateTransactionManager无法与2个不同的会话工厂一起工作。相反,他应该使用像JTA事务管理器这样的不同经理。但只有当他需要在一个事务中访问两个数据源时。否则,解决方案应该为每个会话工厂使用额外的管理器,如下面的链接中所述: