考虑以下两个代码。
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)之前进行空检查吗?
答案 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();