我们是新进入hibernate,在我们的项目中保存一个条目,以下给定的代码是使用的,请看一下。
public void save(Object obj) {
Session session = null;
Transaction transaction = null;
try {
session = sessionFactory.getCurrentSession();
transaction = session.beginTransaction();
session.save(obj);
session.flush();
transaction.commit();
} catch (JDBCException jde) {
logger.fatal("Error occured in database communication", jde);
transaction.rollback();
throw new RuntimeException(jde);
} finally {
if (session.isOpen()) {
session.close();
}
}
}这是正确的做法(考虑到性能和安全性)吗?这个线安全吗?因为同时可能有很多用户。
附加问题:在Java 8中有什么方法可以使代码更好吗?
ps:这个方法是在我们的DatabaseUtil类中编写的。
发布于 2016-02-18 10:38:06
您的finally应该尽可能安全,因为您可能已经发生了一些错误。为此,使用空指针可能会遇到麻烦:
} finally {
if (session.isOpen()) {
session.close();
}
}如果会话是null,那么您刚刚导致了另一个错误,所以在调用它之前先测试session:
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}https://codereview.stackexchange.com/questions/120390
复制相似问题