在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 文档;