使用http请求Spring Hibernates会话问题

时间:2009-12-07 09:32:58

标签: hibernate spring jsp

我也有相同的情况,我在我的web.xml中配置了这样的OpenSessionInViewFilter。

<!-- Hibernates session management for request -->
 <filter>
  <filter-name>hibReqSessionFilter</filter-name>
  <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>hibReqSessionFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

但仍然得到同样的错误

[12/7/09 4:22:17:968 EST] 0000001e WebApp        E   [Servlet Error]-[springweb]: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
 at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:132)
 at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:174)
 at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)
 at com.moodys.mspg.model.MspgLkpAnalyst_$$_javassist_5.getAnalystId(MspgLkpAnalyst_$$_javassist_5.java)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:615)
 at org.apache.commons.el.ArraySuffix.evaluate(ArraySuffix.java:314)
 at org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145)
 at org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:263)
 at org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:190)
 at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:754)
 at com.ibm._jsp._deallist._jspx_meth_c_out_10(_deallist.java:302)
 at com.ibm._jsp._deallist._jspx_meth_c_forEach_0(_deallist.java:375)
 at com.ibm._jsp._deallist._jspService(_deallist.java:97)
 at com.ibm.ws.jsp.runtime.HttpJspBase.service(HttpJspBase.java:87)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
 at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1095)
 at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1036)
 at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:118)
 at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
 at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:832)
 at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:679)
 at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:565)
 at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
 at com.ibm.wsspi.webcontainer.servlet.GenericServletWrapper.handleRequest(GenericServletWrapper.java:122)
 at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionServletWrapper.handleRequest(AbstractJSPExtensionServletWrapper.java:226)
 at com.ibm.ws.jsp.webcontainerext.AbstractJSPExtensionProcessor.handleRequest(AbstractJSPExtensionProcessor.java:285)
 at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:321)
 at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:236)
 at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:257)
 at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1183)
 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:902)
 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
 at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
 at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1095)
 at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1036)
 at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:145)
 at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
 at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
 at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
 at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
 at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:832)
 at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:679)
 at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:565)
 at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
 at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3440)
 at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:267)
 at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:815)
 at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1461)
 at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:118)
 at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
 at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)
 at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:267)
 at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
 at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
 at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
 at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
 at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
 at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
 at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:195)
 at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:743)
 at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:873)
 at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473)

如果我敲掉这个过滤器并在我的orm xmls中使用lazy =“false”它会按预期工作。

但我希望这些东西可以延迟加载。任何身体都可以帮助我实现这个目标

非常感谢提前

2 个答案:

答案 0 :(得分:1)

您是否在同一会话中/在同一请求期间加载实体?如果没有,你试图在一个分离的实体上懒洋洋地加载一个集合(即实体的会话已经关闭),这将导致LazyInitializationException

如果您正在显示的实体在上一个请求期间已加载,您应该能够从数据库重新加载它,然后将其与当前的Hibernate会话相关联。

(有关托管/分离实体的简短说明,请参阅我的answer to this unrelated question。)

根据评论进行编辑:嗯,在这种情况下,我的魔力在这里结束。例外情况很明显 - 您尝试加载集合时没有打开会话。如果你真的没有将实体存储在某个地方的会话中,可能是因为你经历了POST/redirect/GET周期,那么我只能建议您通过调试器逐步查看OpenSessionInViewFilter.doFilterInternal()以查看将要发生的事情在那里。祝你好运!

答案 1 :(得分:0)

spring将在您的应用程序上下文中查找会话工厂,默认名称为sessionFactory。如果不使用默认名称,请配置OpenSessionInViewFilter的名称。