Java 7中Closeable资源的回滚尝试捕获

时间:2018-07-10 13:50:23

标签: java hibernate

我正在尝试找出使用Closeable资源对异常执行回滚的最佳方法。

说我有这个代码:

=AGGREGATE(14,6,$B$2:$B$20/($A$2:$A$20=A2),1)

如果有异常,我想回滚该事务,但是在我的示例中,该事务已经在catch中关闭,因为已经调用了close(在close之后执行catch块)。

如何使用需要回滚的Closeable对象,或者我应该使用旧样式try / catch并自行关闭资源?

1 个答案:

答案 0 :(得分:1)

以下是我的评论:尝试在try(Closeable){}中添加一个try / catch?

public <T> void saveOrUpdate(final T o) {
  try (Session session = HibernateSessionFactoryUtil.getSession()) {
    Transaction transaction;
    try {
        transaction = session.beginTransaction();
        session.saveOrUpdate(o);
        if (transaction != null)
          transaction.commit();
    } catch (Exception re) {
        if (transaction != null)
          transaction.rollback();
        throw re;
    }
 } 
}