2011-09-22 47 views
4

我正在使用兩個不同的數據庫。我使用兩個不同的會話從兩個數據庫中刪除記錄。代碼如下:休眠 - 兩個不同的事務將成功提交

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.I有一些想法大約兩階段提交。但我需要回滾事務,如果異常會發生這兩個事務。

回答

3

您不能回滾tr1(如果tr2的提交失敗),因爲到那時tr1已經被提交。至少我沒有看到在冬眠中這樣做的原生方式。如果您使用的是完整的Java EE應用服務器,或者可以通過其他方式啓用它(如this和Spring的JtaTransactionManager),那麼您可以做的就是使用分佈式事務(JTA數據源)。