我是SSH集成。hibernate查询几次后就会卡死。
我的BASEDAO是这样写的。@SuppressWarnings("unchecked")
public <T> List<T> list(Class<T> clazz, String where, List params) {
String hql="from "+clazz.getSimpleName()+" o where 1=1 ";
if(where!=null&&!"".equals(where)){
hql+=where;
}
Session session=super.getSession();
Query query=session.createQuery(hql);
if(params!=null&¶ms.size()>0){
for(int i=0;i<params.size();i++){
query.setParameter(i,params.get(i));
}
}
return (List<T>)query.list();
}没有释放session,我在web.xml里配置了spring的opensessionfilter,这样就能防止懒加载问题。
但是查询几次后就会卡死。
我再这个方法里后来加了一句super.releaseSession(session);
解决了这个问题。但懒加载就出错了。我不知道配置opensessionfilter还有没有用了。如果把所有的多对一关系的lazy都设成为false的话,不是很影响性能么?请问高手应该如何解决?
我的BASEDAO是这样写的。@SuppressWarnings("unchecked")
public <T> List<T> list(Class<T> clazz, String where, List params) {
String hql="from "+clazz.getSimpleName()+" o where 1=1 ";
if(where!=null&&!"".equals(where)){
hql+=where;
}
Session session=super.getSession();
Query query=session.createQuery(hql);
if(params!=null&¶ms.size()>0){
for(int i=0;i<params.size();i++){
query.setParameter(i,params.get(i));
}
}
return (List<T>)query.list();
}没有释放session,我在web.xml里配置了spring的opensessionfilter,这样就能防止懒加载问题。
但是查询几次后就会卡死。
我再这个方法里后来加了一句super.releaseSession(session);
解决了这个问题。但懒加载就出错了。我不知道配置opensessionfilter还有没有用了。如果把所有的多对一关系的lazy都设成为false的话,不是很影响性能么?请问高手应该如何解决?
看看这个:
http://blog.csdn.net/chongsha/archive/2009/09/22/4578640.aspx
1楼给的资料不错 看看
关键是要看你如何获取到session对象的,和sping集成后使用session应该用HibernateCallback接口中的doInHibernate(Session session)方法实现,这样spring会自动关闭session的。