您的位置:首页 > 其它

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

2017-09-25 19:54 381 查看
遇到懒加载的问题:

org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:167)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)
at cn.itcast.oa.domain.Department_$$_javassist_1.getName(Department_$$_javassist_1.java)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:83)
at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
at org.apache.el.parser.AstValue.getValue(AstValue.java:123)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:182)

........

  问题出现的原因:当有一个请求时,先执行Action,后执行Result(就是返回到对应的页面);在执行Action的时候,里面会调用Service,而事物

一般是在Service中的开启的,在执行Service方法时就会开启事物:open Session begin tx ;当Service方法执行完成时就会:commit tx close Session。

但是在Result(一般就是对应的页面)用到懒加载,这时Session已经在Service执行完就关闭了,就导致一些对象就不能在Result显示,最终导致懒加载

异常。



如何解决懒加载出现的异常:

     就是推迟session的关闭,在Filter或Interceptor时在关闭 session,就可以了。

使用OpenSessionInViewFilter解决解决懒加载问题,在web.xml中配置(这里要注意,一定要配置在Struts之前):

  <!--配置Spring的OpenSessionInViewFilter,以解决懒加载问题 -->

  <filter>

  <filter-name>OpenSessionInViewFilter</filter-name>

  <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>

  </filter>

  <filter-mapping>

  <filter-name>OpenSessionInViewFilter</filter-name>

  <url-pattern>*.action</url-pattern>

  </filter-mapping>

前提是:一个请求
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐