用struts+hibernate+spring开发时碰到延迟加载问题.思考多日,请人指点下!

eliry 2005-11-13 09:50:38
我在业务逻辑处理时已经通过getter属性项来触发了延迟加载使数据调入缓存.可在页面显示还是出现如下错误:
org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed
org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:54)
org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:85)
org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:131)
com.eliry.pojo.User$$EnhancerByCGLIB$$1a52aa0b.toString(<generated>)
org.apache.struts.taglib.bean.WriteTag.formatValue(WriteTag.java:380)
org.apache.struts.taglib.bean.WriteTag.doStartTag(WriteTag.java:232)
org.apache.jsp.viewTopics_jsp._jspx_meth_bean_write_3(org.apache.jsp.viewTopics_jsp:684)
org.apache.jsp.viewTopics_jsp._jspService(org.apache.jsp.viewTopics_jsp:278)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

这个问题,我已经想了很多次还是没结果.请熟悉这方面应用的朋友帮忙下! 不甚感激.
...全文
259 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluemeteor 2005-11-27
  • 打赏
  • 举报
回复
我想你用的Hibernate 3版本吧

看看这篇文章是否有帮助

http://blog.csdn.net/bluemeteor/archive/2005/03/12/317992.aspx
Vincent2013SH 2005-11-27
  • 打赏
  • 举报
回复
加一个OpenSessionInView过滤器就ok了
eliry 2005-11-27
  • 打赏
  • 举报
回复
可是我要延迟加载的是一个关联对象不是一个对象集合.楼上朋友门的方法好象行不通啊!
zhengcg 2005-11-14
  • 打赏
  • 举报
回复
还有可以在查询的时候采用fetch的方式,这样也可以把相关联的类一并加载。下面是参考原文:
还有,一个"fetch"连接允许仅仅使用一个选择语句就将相关联的对象或一组值的集合随着他们的父对象的初始化而被初始化,这种方法在使用到集合的情况下尤其有用,对于关联和集合来说,它有效的代替了映射文件中的外联接 与延迟声明(lazy declarations). 查看 第 20.1 节 “ 抓取策略(Fetching strategies) ” 以获得等多的信息。
zeq258 2005-11-14
  • 打赏
  • 举报
回复
把相关的代码贴出来,好象就是楼上说的这个问题!
Octer 2005-11-13
  • 打赏
  • 举报
回复
这样你是拿不到的,因为这时候session已经关闭了,主要由于你的one-to-many中lazy设置为true,如果确实需要延迟加载,可以在session没关闭前,调用Hibernate.initialize(pojo.getChildren());或者pojo.getChildren().siz(),让集合代理类初始化,并加载关联对象集合,这一动作也要在session关闭之前操作。

67,512

社区成员

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

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