我正在使用hibernate开发一个应用程序,并且像往常一样在Entities
个事务中保存hibernate
。如果交易已经成功完成,我希望从交易中“获得反馈”,并根据该交易来确定下一个代码。这是我用来更新实体的简单方法:
public boolean updateDepartment(Department s) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = HibernateUtil.getTransaction(session);
boolean success = false;
try
{
tx.begin();
session.update(s);
tx.commit();
success = true;
}
catch (Exception e)
{
tx.rollback();
e.printStackTrace();
success = false;
}
return success;
}
从其他代码调用该方法:
boolean b = dao.updateDepartment(d);
if(b)
{
doStuff();
}
else
{
showMessage("Save not usccessful. Try again");
}
我的问题是这种使用boolean
变量的方法是否是最佳方式,还是可以以更好的方式执行。如果我的方法没问题,如果return
语句被finally
包围,会更好吗?
答案 0 :(得分:4)
session.getTransaction()wasCommitted();即使事务已提交,也会返回false。请看一下
对我有用的是
// close database connection
public boolean closeDBConnection() {
boolean successful = false;
try {
session.getTransaction().commit();
successful = true;
} catch (HibernateException r) {
//log exception here
} finally {
session.close();
session = null;
}
return successful;
}
答案 1 :(得分:1)
我们可以使用:
session.getTransaction().getStatus() == TransactionStatus.COMMITTED
同样
TransactionStatus.ROLLED_BACK
但仅限hibernate 4
答案 2 :(得分:-2)
您可以使用session.getTransaction().wasCommitted();
声明确认交易是否已提交。如果tx已提交,则返回TRUE。