我在方法中加了一个垃圾回收System.gc()。效果好了很多。但还是偶尔出错。从新刷新又可以用了。但是还是觉得不稳定。
不知道根本的原因是什么?

解决方案 »

  1.   

    我怎么没看到的close()方法呢??你去看看你的数据库连接吧,是不是已经满了!!!或者是不是有数据库死锁产生了!
      

  2.   

    同意3楼意见,在return前加句"session.close();"
      

  3.   

    很感谢3楼的意见。
    我试了 
    List list=criteria.list();
    session.close();
    return  list;
    这样可以,但是有个问题。session关闭后。如果返回的集合中多对一或一对多关系,关闭session就无法取得通过
    类似userinfo.getBm().getName()这样的方法取得另外一个实体对象。因为这些实体对象是存在session中的。
      

  4.   

    经过这段时间,发现正解是关闭延时加载功能就ok。因为,默认延时加载是打开的,当我们criteria.list()时,它是不会去读取对象中的对象属性的。因为延时加载会在调用这个属性对象的时候才会去数据库读取。所以当我们关闭session时,实际上只得到了list,而不会得到list中包含对象的对象属性。