OpenSessionInView

OpenSessionInView


  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配置而已。我個人比較傾向配置在application.xml裏,因爲web.xml裏配置的東西的太多的話容易發生衝突,雖然可以調整,但是畢竟多了個麻煩。   OpenSessionInViewInterceptor配置:
 <beans>

  <bean name="openSessionInViewInterceptor" class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">

  <property name="sessionFactory">

  <ref bean="sessionFactory"/>

  </property>

  </bean>

  <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

  <property name="interceptors">

  <list>

  <ref bean="openSessionInViewInterceptor"/>

  </list>

  </property>

  <property name="mappings">

  ......

  </property>

  </bean>

  ......

  </beans>

  OpenSessionInViewFilter配置: (此監聽器應該在struts2的監聽器前面)

  <web-app>

  ......

  <filter>

  <filter-name>hibernateFilter</filter-name>

  <filter-class>

  org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

  </filter-class>

  <init-param>

  <param-name>singleSession</param-name>

  <param-value>true</param-value>

  </init-param>

  </filter>

  ......

  <filter-mapping>

  <filter-name>hibernateFilter</filter-name>

  <url-pattern>*.do</url-pattern>

  </filter-mapping>

  ......

  </web-app>

 

發佈了58 篇原創文章 · 獲贊 1 · 訪問量 3571
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章