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

Hibernate-两个不同的事务将成功提交,hibernate,Hibernate,我使用两个不同的数据库。我使用两个不同的会话从两个数据库中删除记录。代码如下: try{ Session session1 = factory.getSession(); Transaction trn1 = session1.beginTrn(); session1.delete(foobar); trn1.commit(); Session session2 = jbomContext.getGrahpSession(); Transaction trn2 = se

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

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中,我无法回滚transaction1。我对两阶段提交有一些想法。但是如果两个事务都会发生异常,我需要回滚事务。

您无法回滚tr1(如果tr2的提交失败),因为此时tr1已经提交。至少在hibernate中,我没有看到一种原生的方法。如果您在一个成熟的JavaEE应用服务器上,或者可以通过其他方式(如和Spring的JtaTransactionManager)启用它,那么您可能可以使用分布式事务(JTA数据源)