对于Hibernate中懒加载异常问题有如下解决方案:
第一种:在配置文件中加入lazy="false"
代码中位置:
<span style="font-size:18px;"><!-- parent属性,本类与Department(上级)的多对一 -->
<many-to-one name="parent" class="Department" column="parentId" <span style="color:#FF0000;">lazy="false"</span>></many-to-one>
<!-- children属性,本类与Department(下级)的一对多 -->
<set name="children" cascade="delete" <span style="color:#FF0000;">lazy="false"</span>>
<key column="parentId"></key>
<one-to-many class="Department"/>
</set>
</span>
关闭了懒加载的属性,使其在查询时直接加载。但是在Session关闭后就难以用到懒加载的属性,有一种更好的解决方案能够完美解决这个问题。
第二种:在过滤器中关闭Session
从上图可以知道,正常情况下,当提交事务的时候,也就关闭了session,那么懒加载的属性的生命周期也随之结束。但是,怎么能让Session不关闭呢?
在web.xml中配置一个过滤器
<span style="font-size:18px;"><!--配置Spring的用于解决Hibernate懒加载异常的问题,必须写在Struts核心过滤器之前 -->
<filter>
<filter-name>OpSessionInViewFilter</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> <!-- 凡是action请求都会调Service -->
</filter-mapping></span>
使用openSessionInViewFilter,可以在提交事务的时候不关闭session,直到请求结束。
很小的知识点,多积累,多总结。