现在的位置: 首页 > 综合 > 正文

SSH时,使用OpenSessionInViewFilter,Dao中用到了getSession()多刷新几次卡住了

2013年08月14日 ⁄ 综合 ⁄ 共 2990字 ⁄ 字号 评论关闭

 

 没有怎么深入研究过Hibernate与Spring,最近在使用SSH时,使用了OpenSessionInViewFilter的方式:

 

 

  1. <filter>
  2.         <filter-name>OpenSessionInViewFilter</filter-name>
  3.         <filter-class>
  4.             org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
  5.         </filter-class>
  6.         <init-param>
  7.             <param-name>singleSession</param-name>
  8.             <param-value>false</param-value>
  9.         </init-param>
  10.     </filter>
  11.     <filter-mapping>
  12.         <filter-name>OpenSessionInViewFilter</filter-name>
  13.         <url-pattern>/*</url-pattern>
  14.     </filter-mapping>

一个Dao类继承了HibernateDaoSupport,有一个方法如下:

  1. public List executeQuery( String hql, String[] param, int start, int pageSize) 
  2.     {
  3.                     // TODO Auto-generated method stub
  4.                     List list = new ArrayList();
  5.                     if(hql==null || hql.equals(""))
  6.                     {
  7.                         return list;
  8.                     }
  9.                     Query query = session.createQuery(hql);
  10.                     if(hql.indexOf("?")>0 && param!=null)
  11.                     {
  12.                         for(int i=1;i<=param.length;i++)
  13.                         {
  14.                             query.setParameter(i, param[i]);
  15.                         }
  16.                     }else if(hql.indexOf("?")<0 && param!=null)
  17.                     {
  18.                         return list;
  19.                     }
  20.                     if(start>=0 && pageSize>0)
  21.                     {
  22.                         query.setFirstResult(start);
  23.                         query.setMaxResults(pageSize);
  24.                     }
  25.                     return query.list();
  26.            }

 

结果在Action调用通过Service调用此方法,最后在浏览器里狂刷,才几下子...浏览器就停在那些了.没研究出什么原理,最后使用HibernateCallback回调解决了.

谁发现相关的文章给我发个连接啊~~~~

 

  1. public List executeQuery(final String hql, final String[] param, final int start, final int pageSize) 
  2.     {
  3.         return (List)getHibernateTemplate().execute(new HibernateCallback()//这里使用了匿名内部类 
  4.           {
  5.            public Object doInHibernate(Session session)//Spring进行事务维护 省去每次创建session和关闭session
  6.              throws HibernateException
  7.            {
  8.                     // TODO Auto-generated method stub
  9.                     List list = new ArrayList();
  10.                     if(hql==null || hql.equals(""))
  11.                     {
  12.                         return list;
  13.                     }
  14.                     Query query = session.createQuery(hql);
  15.                     if(hql.indexOf("?")>0 && param!=null)
  16.                     {
  17.                         for(int i=1;i<=param.length;i++)
  18.                         {
  19.                             query.setParameter(i, param[i]);
  20.                         }
  21.                     }else if(hql.indexOf("?")<0 && param!=null)
  22.                     {
  23.                         return list;
  24.                     }
  25.                     if(start>=0 && pageSize>0)
  26.                     {
  27.                         query.setFirstResult(start);
  28.                         query.setMaxResults(pageSize);
  29.                     }
  30.                     return query.list();
  31.            }
  32.           }, true);
  33.     }

 

抱歉!评论已关闭.