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();
}
}
}
- 我想同步提交和创建文件。如果创建文件时出现任何错误,则应该回滚事务。
- 如果提交事务时出现任何错误,则不应创建文件。 (这个场景工作正常)
但是第一种情况无法正常工作,因为如果创建 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/