若有使用則會把一個Hibernate Session和一次完整的request過程對應的thread相綁定,使session在request的整個期間都可以使用。當View層邏輯完成後(如:在jsp用EL取關聯對象),才會通過Filter的doFilter方法自動關閉session。但是之後每一次request中的所有hibernate操作,都被當成同一個session並且被改成readOnly,所以將無法進行save,merge和delete的動作。這時就需要用transaction manager。
缺點:會將事務橫跨request 到 response 的整個HTTP 生命週期,長時間占用資料庫連接,可能在用時很方便,但是這一種非常消耗系統資源的解決方案。
在web.xml中加入
注意事項:一個OpenSessionInViewFilter只能管理一個SessionFactory, 若有多個DateSource就必須有多個OpenSessionInViewFilter
OpenSessionInViewFilter org.springframework.orm.hibernate3.support.OpenSessionInViewFilter sessionFactoryBeanName sessionFactory OpenSessionInViewFilter *.do