交易未成功启动

时间:2017-07-22 06:38:09

标签: java hibernate derby

public void saveSoDtls(SoDtls soDtls){    
            try {
                 session = HibernateSessionFactory.getSessionFactory()
                        .openSession();

                session.beginTransaction();

                 session.save(soDtls);

                session.getTransaction().commit();

               //Creating pdf file (itext) using SoDtls object 
            } catch (HibernateException hex) {
                session.getTransaction().rollback(); 
                throw hex;
            }catch (Exception ex) {
                session.getTransaction().rollback();  //------> getting error at this line
                throw ex;
            }finally{
                if(session != null){
                    session.close();
                }
            }
}
  1. 我想同步提交和创建文件。如果在创建文件时出现任何错误,则应该回滚事务。
  2. 如果在提交事务时出现任何错误,则不应创建文件。 (这种情况正常)
  3. 但是第一种情况不能正常工作,因为如果在创建pdf文件时出现错误,则在回滚时未成功启动事务。

2 个答案:

答案 0 :(得分:1)

U无法回滚已提交的事务,也许您应该创建文件然后提交事务,如果发生了错误,只需删除文件并回滚

        try {

            session.beginTransaction();
            session.save(soDtls);
           //Creating pdf file (itext) using SoDtls object 

            session.getTransaction().commit();

        }}catch (Exception ex) {
            deleteFileIfExists();
            session.getTransaction().rollback();  //------> getting error at this line
            throw ex;
        }finally{
            if(session != null){
                session.close();
            }
        }

}

答案 1 :(得分:0)

您可以尝试以下示例代码:

try {
  final Session session = HibernateSessionFactory.getSessionFactory()
                        .openSession();

  final Transaction tx = session.beginTransaction();

    // do things


    if (!tx.wasCommitted()) {    
      tx.commit();
    }
  } catch (Exception e) {
    tx.rollback();
    e.printStackTrace();
  }
相关问题