<!--初始化WebApplicationContext-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
 <!--open session in view   -->
  <filter>   
   <filter-name>hibernateFilter</filter-name>   
   <filter-class> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter </filter-class>   
   <init-param>   
   <param-name>singleSession</param-name>  
   <param-value>true</param-value>   
   </init-param>   
  </filter> 
  <filter-mapping> 
<filter-name>hibernateFilter </filter-name> 
<url-pattern>*.jsp</url-pattern> 
  </filter-mapping>调用代码User与Message是一对多的关系
public Users queryUsers(final int id){
return (Users)getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session)
throws HibernateException, SQLException { String hql = "from Users where id=:id ";
Query query = session.createQuery(hql);
query.setInteger("id",id);
List<Users> list = query.list();
return list.get(0);   
}
}); 
}
public class UserAction extends Action {

private TestDao testDao;

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception { Users user = testDao.queryUsers(1);
System.out.println(user.getMessages().size());
return mapping.findForward("ok");
}
}执行代码抱错...Session is closed...
求高手帮忙解决呀,困扰我很多天了

解决方案 »

  1.   

    opensessioninview真的好么?
    个人觉得貌似把jsp与action等各层结合的更紧密了。
      

  2.   

    再自己查查什么地方开始session就关闭了 检查一下
      

  3.   

    -----解决延迟加载的二个最好途径 1:修改配制文件一方面的 <set... 结点 /> 加一个 lazy="false" 这种办法对程序不太灵活 
    2:强制加载 

    下面采用第二种强制加载方案: 
    调用代码User与Message是一对多的关系 
    public Users queryUsers(final int id){ 
    return (Users)getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session) 
    throws HibernateException, SQLException { String hql = "from Users where id=:id "; 
    Query query = session.createQuery(hql); 
    query.setInteger("id",id); 
    List <Users> list = query.list(); 
    for(Users u:list){ 
        Hibernate.initialize(Users.getMessages());//Users.getMessages() 这要根据你的user类Set属性有关 

    return list.get(0);  

    });