2010-04-14 168 views
1

在我的代碼中,我一個接一個地更新兩個表。交易管理

update(table1_details);

update(table2_details);

因此,如果更新在table1中失敗,table2不應該更新或應該回滾。

如何處理這種情況。我知道我必須使用交易。有人可以幫助代碼! 我使用Java與春天和冬眠。

+1

問題在哪裏?你不能閱讀在線文檔嗎?例如:http://static.springsource.org/spring/docs/2.5.x/reference/transaction.html(第一個谷歌回答'春季休眠交易'搜索)! – Thierry 2010-04-14 19:50:40

回答

0

我不記得正確的API,但這樣的事情:

Transaction tx = em.getTransaction(); 

    tx.begin(); 
    try { 
     update1(); update2(); 
    } 
    catch(Exception e) { 
     failed = true 
    } 
    finally { 
     if(!failed) tx.commit(); 
     else tx.rollbacl(); 
    } 
2

問題有些寬泛,並有實現這一幾種方法,但我想:

  • 使用Spring將Hibernate SessionFactory注入到DAO對象中。
  • 使用Spring將DAO注入到服務對象中並在業務方法中調用它們。
  • 在業務方法級別使用Spring聲明性事務管理(使用Spring AOP或@Transactional)。

事情是這樣的:

@Transactional 
public void doSomething() { 
    dao1.foo(); 
    dao2.bar(); 
} 

有關配置的詳細信息,請查看Spring文檔的Chapter 9. Transaction management