org.hibernate.LazyInitializationException: could not initialize proxy - no Session
2017-09-25 19:54
465 查看
遇到懒加载的问题:
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>
前提是:一个请求
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>
前提是:一个请求
相关文章推荐
- 【bug记录】jpa 解决org.hibernate.lazyinitializationexception could not initialize proxy - no session
- 解决懒加载问题org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- Error org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- org.hibernate.LazyInitializationException could not initialize proxy-no Session的解决
- Hibernate懒加载异常: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- 异常: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- 延迟初始化错误: org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- org.hibernate.LazyInitializationException: could not initialize proxy - no Session
- org.hibernate.LazyInitializationException: could not initialize proxy - no Session