failed to lazily initialize a collection of rlife.SchoolNews.NewsType no session or sessiion closed

在SSH项目中整合WebService接口时报错:failed to lazily initialize a collection of role com.edulife.SchoolNews.NewsType no session or session closed;

解决方法如下:

        1. 把一对多的lazy=true改为lazy=false(我使用的是注解,使用fetch=“fetchType.EAGER”正确,因影响性能所以未考虑此方法);

        2. 对于查询中如果用的是xxx.load(class,id)则改为xxx.get(class,id);(未测试,不清楚);

        3. 在web.xml文件中加入:

       <filter>
	        <filter-name>hibernateFilter</filter-name>
	        <filter-class>
			org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
		</filter-class>
		<init-param>
                        <param-name>singleSession</param-name>
                        <param-value>false</param-value>
                </init-param>
	</filter>
	<filter-mapping>
		<filter-name>hibernateFilter</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>
              <!-- 据说<init-param>一定要加,否则可能报错。还有就是hibernateFilter 的顺序有影响,hibernateFilter > actionContextCleanUp > filterDispatcher

              另外,我本人在使用此方法修改时还会报同样的错,此时将<url-pattern>*.do</url-pattern>中的 *.do 修改为 /* 即可 -->

注意:还有种多对多 / 一对多的情况,出现异常:

      Caused by: com.sun.istack.SAXException2: 在对象图中检测到循环。这将产生无限深的 XML;
      使用注解:@XmlTransient 注解关联的另外一方的 getter 方法,表示不生成这个对象的 Xml 文档;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值