web.xml中配置如下代码:
<!-- 懒加载 -->
<!-- 配置opensessioninview解决懒加载,本质一个过滤器. --></filter-mapping>
但是,还是给我报no Session
严重: Servlet.service() for servlet jsp threw exception
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.wen.entity.Usertype_$$_javassist_1.getTypeName(Usertype_$$_javassist_1.java)
at org.apache.jsp.top_jsp._jspService(top_jsp.java:92)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)
很郁闷,网上有人说是访问的不是同一个session,看了半天,没弄明白。求快速有效的方法解决。谢谢!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到org.hibernate.LazyInitializationException: could not initialize proxy - no Session
这个异常,通常是因为尝试在Hibernate Session关闭后访问延迟加载(lazy-loaded)的对象属性。你已经在web.xml中配置了Spring的OpenSessionInViewFilter来解决这个问题,但似乎没有生效。
这里有几个可能的原因和对应的解决方案:
过滤器映射路径问题:确保你的<url-pattern>
正确地匹配了所有需要保持Session打开的请求。你已经使用了/*
,这应该能捕获所有请求,看起来这部分配置是正确的。
Spring版本或依赖不兼容:确认你的Spring和Hibernate版本之间是否兼容。有时候,不同版本间的API变化可能导致这类问题。
Spring配置问题:确保Spring的配置正确识别并启用了OpenSessionInViewFilter
。如果你使用的是Spring Boot或其他更现代的Spring配置方式,可能需要在相应的配置类中添加Bean定义而不是直接在web.xml中配置。
事务管理冲突:检查是否有事务管理配置不当,导致在某些操作完成后过早关闭了Session。
JSP直接访问实体:如果在JSP页面中直接访问了需要懒加载的实体属性,即使有OpenSessionInViewFilter,也可能因为某些原因Session提前关闭。尽量避免在视图层直接操作实体,可以考虑在Controller层就将必要的数据提取出来传递给视图。
其他过滤器或拦截器影响:如果有其他的过滤器或拦截器也在处理请求链,确保它们没有以某种方式干扰了OpenSessionInViewFilter
的工作。
重启应用服务器:有时候,尽管修改了配置,但如果没有重启应用服务器,新配置可能不会生效。确保在调整配置后重启了你的应用。
针对以上情况,你可以尝试以下步骤来进一步诊断和解决问题:
如果以上方法都不能解决问题,建议详细检查应用的日志,特别是Spring和Hibernate相关的日志,以便找到更具体的错误线索。