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文件时出现错误,则在回滚时未成功启动事务。
答案 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();
}