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

遇到懒加载的问题:

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的关闭,在FilterInterceptor时在关闭 session,就可以了。

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

  <!--配置SpringOpenSessionInViewFilter,以解决懒加载问题 -->

  <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>

前提是:一个请求

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值