Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 事务未成功启动 我想同步提交和创建文件。如果在创建文件时出现任何错误,则应该回滚事务。 若提交事务时出现任何错误,则不应创建文件。这个场景运行良好_Java_Hibernate_Derby - Fatal编程技术网

Java 事务未成功启动 我想同步提交和创建文件。如果在创建文件时出现任何错误,则应该回滚事务。 若提交事务时出现任何错误,则不应创建文件。这个场景运行良好

Java 事务未成功启动 我想同步提交和创建文件。如果在创建文件时出现任何错误,则应该回滚事务。 若提交事务时出现任何错误,则不应创建文件。这个场景运行良好,java,hibernate,derby,Java,Hibernate,Derby,但第一种方案运行不正常,因为如果创建pdf文件时出错,则回滚时事务未成功启动。您可以尝试以下示例代码: public void saveSoDtls(SoDtls soDtls){ try { session = HibernateSessionFactory.getSessionFactory() .openSession(); session.b

但第一种方案运行不正常,因为如果创建pdf文件时出错,则回滚时事务未成功启动。

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

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();
                }
            }
}

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

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();
  }

}

事务发送对象将无法在catch块的范围内访问,因为您已在try块内创建
        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();
            }
        }