struts2报异常failed to lazily initialize a collection of role: no Session问题的解决

今天在写一个新的ssh项目的时候,遇到了failed to lazily initialize a collection of role: com.crm.domain.Customer.linkmans, could not initialize proxy - no Session异常,

一开始从前半部分字面意思上理解,似乎是延迟加载出了问题,但是我的类和映射文件是hibernate生成工具自动生成的,出问题的概率非常小,检查了一遍,没什么头绪。

然后关于后半段no Session问题,我已经在web.xml中配置了openSessionInView过滤器:

  <!-- struts2的前端控制器 -->
  <filter>
  	<filter-name>struts2</filter-name>
  	<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
  
   <!-- OpenSessionInView,解决延迟加载session在web层不可用的问题
	将session的生命周期延长到和request一致
	 -->
  <filter>
  	<filter-name>OpenSessionInView</filter-name>
  	<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>OpenSessionInView</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
  

这个filter的作用就是延长hibernate的session生命周期,所以也不应该出现问题。于是找了很久的bug。

最后才发现,这个filter的位置出了问题,一定要放在struts2的StrutsPrepareAndExecuteFilter之前,才能起到作用,像这样:

  <!-- opennSessionInView过滤器 -->
  <filter>
  	<filter-name>OpenSessionInView</filter-name>
  	<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>OpenSessionInView</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- struts2的前端控制器 -->
  <filter>
  	<filter-name>struts2</filter-name>
  	<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

终于解决了这个bug,不在报异常了。

所以大家配置配置文件的时候一定要小心细节。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值