每执行依次查询,控制台就有这样的警告
java代码如下:
代码
- public class Employee_sortDAOImpl extends HibernateDaoSupport implements Employee_sortDAO {
- public int getEmployee_sortCount() throws HibernateException {
- String querySentence = "SELECT count(*) FROM Employee_sort_info";
- List list = this.getHibernateTemplate().find(querySentence);
- Integer count = (Integer) list.get(0);
- return count;
- }
- public List getEmployee_sortByPage(Page page) throws HibernateException {
- String querySentence = "FROM Employee_sort_info";
- Query query = getSession().createQuery(querySentence);
- query.setFirstResult(page.getBeginIndex()).setMaxResults(page.getEveryPage());
- return query.list();
- }
- }
警告: finalizing with closed connection
2006-9-18 14:38:26 org.hibernate.jdbc.ConnectionManager finalize
执行几次查询之后就不能查询了,页面不动了,是因为connection没有关闭吗?
问题已经解决了,谢谢哈
修改如下:
代码
- public class Employee_sortDAOImpl extends HibernateDaoSupport implements
- Employee_sortDAO {
- public int getEmployee_sortCount() throws HibernateException {
- String querySentence = "SELECT count(*) FROM Employee_sort_info";
- List list = this.getHibernateTemplate().find(querySentence);
- Integer count = (Integer) list.get(0);
- return count;
- }
- public List getEmployee_sortByPage(Page page) throws HibernateException {
- String querySentence = "FROM Employee_sort_info";
- Session session=this.getHibernateTemplate().getSessionFactory() .openSession();
- Query query = session.createQuery(querySentence);
- query.setFirstResult(page.getBeginIndex()).setMaxResults(page.getEveryPage());
- List list = query.list();
- session.close();
- return list;
- }
- }
还有个问题:如果要实现如下功能,但是让它自己管理session,如何解决,我没有找到HibernateTemplate里面有类似setFirstResult和setMaxResults的方法啊
代码
- public List getEmployee_sortByPage(Page page) throws HibernateException {
- String querySentence = "FROM Employee_sort_info";
- Query query = this.getHibernateTemplate().getSessionFactory().openSession().createQuery(querySentence);
- query.setFirstResult(page.getBeginIndex()).setMaxResults(page.getEveryPage());
- return query.list();
- }
上面的问题都已经解决,谢谢各位,代码如下:
代码
- public List getEmployee_sortByPage(final Page page) throws HibernateException {
- return (List)getHibernateTemplate().execute(
- new HibernateCallback() {
- public Object doInHibernate(Session session) throws HibernateException {
- String querySentence = "FROM Employee_sort_info";
- Query query = session.createQuery(querySentence);
- query.setFirstResult(page.getBeginIndex()).setMaxResults(page.getEveryPage());
- return query.list();
- }
- }
- );
- }
上面的虽然解决了问题,但是太难看了,加了OpenSessionInViewInterceptor方便啊,session可以不管了,也不用使用难看的callback了,呵呵
代码
- <!-- SimpleUrlHandlerMapping -->
- <bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
- <property name="interceptors" ref="openSessionInViewInterceptor"/>
- <property name="mappings">
- <props>
- 。。。
- </props>
- </property>
- </bean>
- <bean id="openSessionInViewInterceptor"
- class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
- <property name="sessionFactory" ref="sessionFactory"/>
- </bean>
代码
- public class Employee_sortDAOImpl extends HibernateDaoSupport implements
- Employee_sortDAO {
- public int getEmployee_sortCount() throws HibernateException {
- String querySentence = "SELECT count(*) FROM Employee_sort_info";
- List list = this.getHibernateTemplate().find(querySentence);
- Integer count = (Integer) list.get(0);
- return count;
- }
- public List getEmployee_sortByPage(Page page) throws HibernateException {
- String querySentence = "FROM Employee_sort_info";
- Query query = this.getSession().createQuery(querySentence);
- query.setFirstResult(page.getBeginIndex()).setMaxResults(page.getEveryPage());
- return query.list();
- }