解决org.hibernate.LazyInitializationException: could not initialize proxy - no Session懒载入问题...

本文介绍了一种在Struts框架中遇到的懒加载异常问题及其解决方案。问题表现为Hibernate无法初始化代理对象,提示未开启Session。文章提供了两种解决方法:一是关闭懒加载,但会失去懒加载的优点;二是通过配置Spring的OpenSessionInViewFilter过滤器来解决。

问题描写叙述:

Struts Problem Report

Struts has detected an unhandled exception:

Messages:
  1. could not initialize proxy - no Session
  2. Error reading 'name' on type future.oa.domain.Department_$$_jvstb8a_0
  3. javax.el.ELException: Error reading 'name' on type future.oa.domain.Department_$$_jvstb8a_0
File:org/hibernate/proxy/AbstractLazyInitializer.java

Stacktraces

org.apache.jasper.JasperException: javax.el.ELException: Error reading 'name' on type future.oa.domain.Department_$$_jvstb8a_0
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    .......

javax.el.ELException: Error reading 'name' on type future.oa.domain.Department_$$_jvstb8a_0
    javax.el.BeanELResolver.getValue(BeanELResolver.java:110)
    org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:104)
    org.apache.el.parser.AstValue.getValue(AstValue.java:183)
    org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184)
    ......

org.hibernate.LazyInitializationException: could not initialize proxy - no Session
    org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:164)
    org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:285)
    org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
    future.oa.domain.Department_$$_jvstb8a_0.getName(Department_$$_jvstb8a_0.java)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    ......

You are seeing this page because development mode is enabled. Development mode, or devMode, enables extra debugging behaviors and reports to assist developers. To disable this mode, set:

  struts.devMode=false
in your WEB-INF/classes/struts.properties file.

解决方法:
解决懒载入问题。

方法一:(直接将懒载入关闭):
在 .hbm.xml 里
<!--  lazy="false"关闭懒载入 -->
<set name="children" cascade="delete" lazy="false">   
<key column="parentId"></key>
<one-to-many class="Department"/>
</set>
缺点:一些懒载入的长处也用不了了。

方法二:
在 web.xml里(注:要在 <!-- 配置struts2核心的过滤器 --> 之前
  <!-- 配置Spring的用于解决懒载入问题的过滤器 -->
  <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>
  然后在 *.hbm.xml里 再打开懒载入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值