问题描述:
在进行javaweb开发过程中,遇到一个问题:点击查询省份下的单据数据,前面点击十次左右,能够顺利查询,后面就响应很慢甚至down掉。
问题排查:
在点击过程中,报了js错误,还尝试看看为什么js报错了,明明是后台问题去去看前端,可想而知,方向完全不对。后来有个朋友也检查了一下代码,原来封装底层查询的原生sql查询没有关闭session,还是我自己封装的,挖坑了!
/**
* 根据原生sql语句查询,并返回映射的对象列表
* @param sql
* @param clazz
* @return
*/
private List doSqlFind(String sql, Class<?> clazz) {
Session session = this.getSession();
Query query = session.createSQLQuery(sql).addEntity(clazz);
query.setCacheable(true); // /add cache
return query.list();
}
问题解决:
封装的方法里添加关闭session的方法。
/**
* 根据原生sql语句查询,并返回映射的对象列表
* @param sql
* @param clazz
* @return
*/
private List doSqlFind(String sql, Class<?> clazz) {
Session session = this.getSession();
try {
Query query = session.createSQLQuery(sql).addEntity(clazz);
query.setCacheable(true); // /add cache
return query.list();
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
this.releaseSession(session);
}
return null;
}