2010-04-14 161 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