先直接看起初写的代码:
public List findAll(Integer start, Integer limit) { log.debug("finding all SipNews instances"); try { String queryString = "from SipNews"; Query query = this.getSession().createQuery(queryString); query.setFirstResult(start); query.setMaxResults(limit); return query.list(); } catch (RuntimeException re) { log.error("find all failed", re); throw re; } }
打眼一看好像是没啥问题,但是这个方法被连续调用3次以上后,程序就卡住了,成假死态。
从结果来看,应该是数据库连接用完没有被释放的问题。我还在想:不是Hibernate自动管理连接的吗?再仔细一看,发现:getSession().createQuery(queryString),⊙﹏⊙b汗,赶紧把它session关闭。
public List findAll(Integer start, Integer limit) { log.debug("finding all SipNews instances"); Session s = this.getSession(); try { String queryString = "from SipNews"; Query query = s.createQuery(queryString); query.setFirstResult(start); query.setMaxResults(limit); return query.list(); } catch (RuntimeException re) { log.error("find all failed", re); throw re; } finally{ s.close(); } }

