解决no-session延迟加载问题
解决no-session延迟加载问题
说明:dao层使用Hibernate从数据库查询数据信息返回给web层,在web层打印信息报no-Session错误,
产生原因
- 关联对象默认都是采用延迟加载
- 事务都是在业务层(service)开启和提交的
- 所以调用完业务层后, 事务已经提交,session已经关闭了
- 由于关联的对象延迟加载 当web层使用关联对象时, session已经不在了, 所以会报no-session异常
解决办法
- 1.不使用延迟加载
- 效率太低
- 2.使用spring提供的解决方案OpenInViewFilter
提供了一个过滤器
在web视图层提供session的打开和关闭
<!--配置延迟加载-->
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>