【问题标题】:Transaction Management事务管理
【发布时间】:2010-04-14 17:52:12
【问题描述】:
在我的代码中,我正在更新两个表,一个接一个。
更新(table1_details);
更新(table2_details);
所以如果 table1 更新失败,table2 不应该更新或者应该回滚。
如何处理这种情况。我知道我必须使用事务。有人可以帮忙写代码吗!!!
我正在将 Java 与 spring 和 hibernate 一起使用。
【问题讨论】:
标签:
java
hibernate
spring
orm
【解决方案1】:
这个问题有点宽泛,有几种方法可以实现,但我会:
- 使用 Spring 将 Hibernate
SessionFactory 注入 DAO 对象。
- 使用 Spring 在服务对象中注入 DAO,并在业务方法中调用它们。
- 在业务方法级别使用 Spring 声明式事务管理(使用 Spring AOP 或
@Transactional)。
类似这样的:
@Transactional
public void doSomething() {
dao1.foo();
dao2.bar();
}
有关配置的更多详细信息,请查看 Spring 文档的Chapter 9. Transaction management。
【解决方案2】:
我不记得正确的 api,但是是这样的:
Transaction tx = em.getTransaction();
tx.begin();
try {
update1(); update2();
}
catch(Exception e) {
failed = true
}
finally {
if( !failed ) tx.commit();
else tx.rollbacl();
}