检查hibernate中的事务是否成功

时间:2014-04-23 08:59:15

标签: java hibernate transactions try-catch

我正在使用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包围,会更好吗?

3 个答案:

答案 0 :(得分:4)

session.getTransaction()wasCommitted();即使事务已提交,也会返回false。请看一下

wasCommitted returns 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。