OpenSessionInView无效的可能原因

首先,我在此写下的是我的项目中设置OpenSessionInView无效的情况下的解决方式,网络上有很多关于OpenSessionInView无效的解决方法,大家在试过后还是没法解决问题的话,可以参考我的错误,看看是不是犯了一样的错误。

我的解决方法是把OpenSessionInView这个Filter设置在Struts的Filter之前(注:web.xml文件中)。

<!-- 这个OpenSessionInView必须配置在下面struts的filter的前面 -->
	<filter>
    	        <filter-name>OpenSessionInViewFilter</filter-name>
    	        <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
	</filter>

	<filter-mapping>
                 filter-name>OpenSessionInViewFilter</filter-name>
    	         <url-pattern>*.action</url-pattern>
	</filter-mapping> 

 另外关于OpenSessionInView,在此做个个人总结,我认为它的作用不是保证在用户登录到退出整个session期的hibernate session共用(也就是共享一个session)。而是在一次Action请求中,一个action中调用的各个dao方法里利用spring的hibernateTemplate方法操作数据库是共享一个hibernate session的,如果不设置openSessionInView的话,一次dao方法的操作实际,就是打开一个session,完成一个事务,然后关闭session的流程,这个打开和关闭session的操作由spring帮我们实现了。此次dao方法获取到的对象,无法再延迟加载相关别的数据了,因为session已经关闭了,这个对象已经不是持久化的了。本次action请求完成,hibernate session还是要关闭的。下次action请求,hibernate session还是做本action中的共享。不知道大家能理解我的意思不?

猜你喜欢

转载自diaryofmuzixiang.iteye.com/blog/1749376