在Spring與Hibernate集成時在web.xml要加入這樣的過濾器:
<filter>
<filter-name>openSessionInView</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value>sessionFactory</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>openSessionInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> web
請問這個過濾器的做用是:spring
OpenSessionInViewFilter是Spring提供的一個針對Hibernate的一個支持類,其主要意思是在發起一個頁面請求時打開Hibernate的Session,一直保持這個Session,直到這個請求結束,具體是經過一個Filter來實現的。
因爲Hibernate引入了Lazy Load特性,使得脫離Hibernate的Session週期的對象若是再想經過getter方法取到其關聯對象的值,Hibernate會拋出一個LazyLoad的Exception。因此爲了解決這個問題,Spring引入了這個Filter,使得Hibernate的Session的生命週期變長。session
opensessioninview是結合 hibernateTemplete在存在延遲加載的狀況下來用的 因爲模板方法中hibernatepemplete默認打開一個session並在並在最後關閉session 這時候用hibernatepemplete若是取到一個對象A該對象內存在延遲加載的對象B 而想要調用A.getB()的話就會出現顯示session已經關閉。 opensessioninview 主要爲了解決該爲題~~~~~~~~~~~~~~~是的session在請求完畢最後關閉。app