我是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&&params.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的话,不是很影响性能么?请问高手应该如何解决?

解决方案 »

  1.   

    opensessionfilter当然有用。
    看看这个:
    http://blog.csdn.net/chongsha/archive/2009/09/22/4578640.aspx
      

  2.   

    是否懒加载 是在配置文件配置的 lazy  = true/false , 不需要单独写什么方法。
      

  3.   

    和你的加载方式也有关,load  get
      

  4.   

    查询卡死的话   注意在finally里面清空sessionhttp://blog.csdn.net/chongsha/archive/2009/09/22/4578640.aspx
    1楼给的资料不错  看看
      

  5.   

    不知道楼主在业务层中是否关闭了session?
    关键是要看你如何获取到session对象的,和sping集成后使用session应该用HibernateCallback接口中的doInHibernate(Session session)方法实现,这样spring会自动关闭session的。