hibernate 执行几条数据后报连接数据库失败

终于找到解决办法了 ,咱们来看下面的内容吧
php

ItemDAOImpl.java
html

public class ItemDAOImpl extends HibernateDaoSupport implements ItemDAO {
java


public List queryAll() throws Exception {
spring

// TODO Auto-generated method stub
数据库

Session session=super.getSession(true);
session

String hql="from Item as i";
app

List l=super.getSession().createQuery(hql).list();
测试

return l;
ui

}
url

}\

其实上面的代码隐藏了一个问题,数据库链接并无被关闭,因此一直出现以上的问题。

我这里提供三个解决方案

方案一:

用此种方法,虽然没有手动关闭数据库链接,但spring已经帮咱们关闭了

return super.getHibernateTemplate().find(hql);

方案二:(经测试,此方案比较有效)

设定HibernateTemplateAllowCreateTrue

spring API HibernateDaoSupport

protected net.sf.hibernate.Session getSession(boolean allowCreate)

Get a Hibernate Session, either from the current transaction or a new one.

public class ItemDAOImpl extends HibernateDaoSupport implements ItemDAO {


public List queryAll() throws Exception {

// TODO Auto-generated method stub

Session session=super.getSession(true);

String hql="from Item as i";

List l=session.createQuery(hql).list();

try{

return l;

}finally{

session.close();

}

}

}

方案三:

Spring API:
geSession()org.springframework.orm.hibernate3.support.HibernateDaoSupport 中的一个方法,

它能够从当前事务或者一个新的事务得到一个hibernate sessionsession.

修改后的代码以下:


public class ItemDAOImpl extends HibernateDaoSupport implements ItemDAO {

public List queryAll() throws Exception {

// TODO Auto-generated method stub

Session session = super.getSession();

String hql = "from Item as i";

List l = session.createQuery(hql).list();

releaseSession(session);


}

}

困扰了几天的问题终于解决了,项目搁浅了好几天了,就是对springsession的管理不清楚。

相关文章
相关标签/搜索