Hibernate - 两个不同的事务将成功提交

时间:2011-09-22 13:02:40

标签: hibernate

我正在使用两个不同的数据库。我正在使用两个不同的会话来从两个数据库中删除记录。代码如下:

try{
  Session session1 = factory.getSession();
  Transaction trn1 = session1.beginTrn();
  session1.delete(foobar);
  trn1.commit();

  Session session2 = jbomContext.getGrahpSession();
  Transaction trn2 = session2.beginTrn();
  session2.delete(box);`enter code here`
  trn2.commit();
}catch(Exception e){
     trn1.rollback();
     trn2.rollback();
}

这里,问题是如果在transaction2中发生错误我无法回滚事务。我对两阶段提交有一些了解。但如果事务发生异常,我需要回滚事务。

1 个答案:

答案 0 :(得分:3)

你不能回滚tr1(如果tr2的提交失败)因为tr1已经提交了。至少我没有在hibernate中看到这样做的本地方式。您可以做的是使用分布式事务(JTA数据源),如果您使用的是完整的Java EE App Server,或者可以通过其他方式(例如this和Spring的JtaTransactionManager)启用它。