open session in view 配置后为何仍然不能进行延迟加载

zhaoweianan 2008-09-11 11:54:37
<!--初始化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...
求高手帮忙解决呀,困扰我很多天了
...全文
210 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiedamu 2008-09-14
  • 打赏
  • 举报
回复
-----解决延迟加载的二个最好途径

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);
}
});
}
zhaoweianan 2008-09-12
  • 打赏
  • 举报
回复
的确不是很好,但是我现在只知道这样能解决延迟加载问题,希望各位帮忙解决给我一些更好的方法.
rascalboy520 2008-09-12
  • 打赏
  • 举报
回复
唉,帮你顶一下吧,
jinsu_st 2008-09-12
  • 打赏
  • 举报
回复
opensessioninview真的好么?
个人觉得貌似把jsp与action等各层结合的更紧密了。
shendiaoke 2008-09-12
  • 打赏
  • 举报
回复
再自己查查什么地方开始session就关闭了 检查一下

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧