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