我正在使用两个不同的数据库。我正在使用两个不同的会话来从两个数据库中删除记录。代码如下:
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中发生错误我无法回滚事务。我对两阶段提交有一些了解。但如果事务发生异常,我需要回滚事务。
答案 0 :(得分:3)
你不能回滚tr1(如果tr2的提交失败)因为tr1已经提交了。至少我没有在hibernate中看到这样做的本地方式。您可以做的是使用分布式事务(JTA数据源),如果您使用的是完整的Java EE App Server,或者可以通过其他方式(例如this和Spring的JtaTransactionManager)启用它。