在HIbernate / SQL中获取Session和Release会话的最佳方法

时间:2012-03-30 13:24:22

标签: java sql hibernate session

考虑以下两个代码。

Session session = null;
query = "update Employee set EMPLOYEE_NAME = 'Jay' where EMPLOYEE_ID = 1";

    try {
        session = getSession();
        Query query = session.createSQLQuery(dlquery);
        query.executeUpdate();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        if(session != null) {
            releaseSession(session);
        }
    }

和....

Session session = getSession();
query = "update Employee set EMPLOYEE_NAME = 'Jay' where EMPLOYEE_ID = 1";
    try {
        Query query = session.createSQLQuery(dlquery);
        query.executeUpdate();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        if(session != null) {
            releaseSession(session);
        }
    }

两者中哪一个更好用?或者,还有更好的方法?我可能在这里做错了什么?

我们还应该在最终调用releaseSession(session)之前进行空检查吗?

5 个答案:

答案 0 :(得分:2)

真的,最好的方法是利用Spring及其JPA / Hibernate支持....您将永远不必在代码中处理它。

答案 1 :(得分:1)

说实话,我会说两者中没有太大区别,但你应该总是检查会话是否为空,这样你就不会引起另一个NullReferenceException。

不幸的是,这可能是在Java中最干净的方法,因为没有像C#中那样的“using”语句,它允许你在使用块完成执行后处理对象。 / p>

答案 2 :(得分:1)

我建议使用交易。如果明天您更改代码以添加其他更新,则在执行更新时发生某些事情时,您不必担心任何一致性问题。除此之外,我建议在查询中使用参数,而不是对值进行硬编码。这样您就可以重用查询。

答案 3 :(得分:1)

如果getSession()由于某种原因抛出异常,那么在第二个解决方案中不会出现问题吗?

答案 4 :(得分:0)

使用以下语法来获取和释放会话。

        session = getSession();
        Query query = session.createSQLQuery(dlquery);
        query.executeUpdate();
        session.close();