org.hibernate.LazyInitializationException: failed to lazily initialize

最近在用ssh框架开发时出现这个问题:org.hibernate.LazyInitializationException: failed to lazily initialize

原因很简单,是在非法的session中去调用lazy=“true“的属性,

网上资料蛮多的,解决方法有两个

1,把lazy=”false“

2,在web.xml中加入:(在structs的过滤器之前)、

<filter>
<filter-name>hibernateFilterfilter-name>
<filter-class>
org.springframework.orm.hibernate.support.OpenSessionInViewFilter
filter-class>
filter>
<filter-mapping>
<filter-name>hibernateFilterfilter-name>
<url-pattern>*.dourl-pattern>
filter-mapping>

<filter> 
        <filter-name>struts2filter-name>  
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterfilter-class>  
  filter>  
  <filter-mapping>  
      <filter-name>struts2filter-name>  
      <url-pattern>/*url-pattern>  
  filter-mapping>

第一种方法,就是设置为不要用lazy加载元素,这样做,虽然可以解决上面这个问题,但是会产生一些不必要的开销。比较复杂的对象对应关系,或者数据量比较大的时候,不推荐这么做
第二种方法,就是避免session关闭过早导致出现这样的异常,这样的方法以前也是使用过,而且一般情况下filter过滤链接都会做。
但是以上这两种方法,在解决小规模的数据时 ,还凑活能用,但是在大量数据时 ,就会产生大量的耗时。
有lazy加载的对象时,千万不能用=这个操作,不然必报这个exception

你可能感兴趣的:(bug解决方案)