首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有必要对catch-block中的事务进行回滚?

是否有必要对catch-block中的事务进行回滚?
EN

Stack Overflow用户
提问于 2012-04-18 15:54:50
回答 1查看 2.1K关注 0票数 5

也许这是一个愚蠢的问题,但如果EntityManager.merge()抛出异常,是否有必要对catch-block中的事务进行回滚?或者异常本身意味着合并将不起作用,所以下次我运行commit时,以前抛出异常的更改将不再适用?

示例:

代码语言:javascript
复制
public void setPerson(Person person) {
EntityManagerFactory emf =   Persistence.createEntityManagerFactory("MyLib");
     EntityManager em = emf.createEntityManager();
     try {            
         if(!em.getTransaction().isActive()){
            em.getTransaction().begin();
         }
         em.merge(person);
         em.getTransaction().commit();
         emf.getCache().evict(Person.class); // clear Person cache
     } catch (Exception ex){
         em.getTransaction().rollback(); // Is this necessary?   
     } finally {
         em.close();
     }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-18 16:05:04

答案取决于em.merge(person)方法的细节和您的数据库驱动程序的实现。

如果该方法只执行一条update语句,则rollback是多余的。然而,如果它可能运行多个更新,那么就不那么清楚了。

我个人会把它放在那里

如果在某些更新完成后删除了rollback,并且您的merge方法出错,但其他更新没有完成,则在没有显式commitrollback的情况下关闭数据库连接将提交或回滚事务,这取决于驱动程序实现。根据javadoc for java.sql.Connection的说法,行为取决于实现。因此,如果您不在错误时rollback自己,您可能最终提交部分更新。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10205210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档