我想知道在hibernate中使用c3p0连接池时是否应该使用session.close()
?或c3p0在一定时间间隔后自动关闭?我是否需要通过
SessionFactory factory = HibernateUtil.getSessionFactory();
Session session=factory.openSession();
因为在以下教程中它不会关闭会话。
正确的方法是什么?
编辑:
这将是我的代码
@SuppressWarnings("unchecked")
@Override
public JSONObject getUserDetails(int id) {
long lStartTime = new Date().getTime();
JSONObject obj = new JSONObject();
try(Session session=factory.openSession()) {
Employee emp=(Employee)session.load(Employee.class,id);
if(emp != null) {
obj.put("id", emp.getId());
obj.put("name", emp.getName());
}
long lEndTime = new Date().getTime();
log.info("[ Personal Details ]Time elapsed For Fetching :"+(lEndTime - lStartTime));
} catch (Exception e) {
// TODO: handle exception
}
}
答案 0 :(得分:3)
我建议你尽快close
你的资源,这样连接就会更快地返回到池 。您也可以使用try-with-resources
Statement来确保发生这种情况。
SessionFactory factory = HibernateUtil.getSessionFactory();
try (Session session = factory.openSession()) {
// ...
}
答案 1 :(得分:0)
正如ELLIOT所说的那样,不使用任何东西就可以手动关闭会话,或者如果你使用的是java 7或更高版本,你可以使用上面指定的try块。
答案 2 :(得分:0)
是使用try-with-resources是更好的选择。
但是这里有很少的假设:
try ( java.util.zip.ZipFile zf = new java.util.zip.ZipFile(zipFileName); java.io.BufferedWriter writer = java.nio.file.Files.newBufferedWriter(outputFilePath, charset) )