java - 交易未成功开始

标签 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. 如果提交事务时出现任何错误,则不应创建文件。 (这个场景工作正常)

但是第一种情况无法正常工作,因为如果创建 pdf 文件时出现错误,则回滚时事务未成功启动。

最佳答案

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

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

}

关于java - 交易未成功开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45251535/

相关文章:

java - 使用InputStream下载大文件

java - Log4j 输出未显示在 Eclipse 控制台中

java - 结果集不可更新

java - Quartz调度程序从JAVA中的另一个Web应用程序手动触发作业

java - 查询包含集合(集合)的大行时,Cassandra 出现内存不足错误

java - 数据库的自动更新会在错误的一侧创建单向连接

java - Hibernate @email 不关心域或 FQDN

mysql - hibernate在提交之前刷新之后获取数据

java - 为什么我收到 http 500 响应?

eclipse - 在Mac上设置DERBY_HOME环境变量?