✎
编程开发网
首页
C语言
C++
面试
Linux
函数
Windows
数据库
下载
搜索
当前位置:
首页
->
基础
->
数据库编程
OpenSessionInViewFilter的详细用法
2015-02-02 20:09:18
·
作者:
·
浏览:
15
标签:
OpenSessionInViewFilter
详细
用法
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain){ try{ Session session = ...SessionFactory.getCurrentSeesion(); //得到session对象 tx = session.beginTransaction(); //开启事务 chain.doFliter(request,response); //传递给下一个 tx.commit(); //提交事务 }catch (Exception e){ //出现异常,回滚事务 } }
简析
:当请求到达时,会首先被此拦截器拦截,当数据经过获取并在V层显示完毕后,回到此Filter内部,此时提交事务-->关闭session。
二、spring的osiv解决方案
OpenSessionInViewFilter [全名:org.springframework.orm.hibernate3.support.OpenSessionInViewFilter]是Spring提供的一个针对Hibernate的一个支持类,其主要意思是在发起一个页面请求时打开Hibernate的Session,一直保持这个Session,直到这个请求结束,具体是通过一个Filter来实现的。 由于Hibernate引入了Lazy Load特性,使得脱离Hibernate的Session周期的对象如果再想通过getter方法取到其关联对象的值,Hibernate会抛出一个LazyLoad的Exception。所以为了解决这个问题,Spring引入了这个Filter,使得Hibernate的Session的生命周期变长。 有两种方式可以配置实现OpenSessionInView,分别是OpenSessionInViewInterceptor和OpenSessionInViewFilter,功能完全相同,只不过一个在web.xml配置,另一个在application.xml配置而已。这里采用常用的filter过滤器来实现:
OpenSessionInViewFilter
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
OpenSessionInViewFilter
*.action