Hibernate 延遲加載要求 Session 開啟狀態。典型場景:Service 事務結束關閉 Session,Controller 轉發到 JSP 視圖渲染時觸發關聯屬性訪問,拋出 LazyInitializationException: could not initialize proxy - no Session。
Spring 提供 org.springframework.orm.hibernate3.support.OpenSessionInViewFilter,將 Session 綁定到整個 HTTP 請求週期,請求結束再關閉,確保視圖層可安全延遲加載。
<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>
singleSession=true:請求範圍內複用同一 Session,避免多個 Session 導致實例不一致url-pattern:建議匹配所有進入 Controller 的路徑(如 *.do、/app/*),不要攔截靜態資源doFilterInternal 開啟 Session 綁定到 ThreadLocalsession.clear()@Transactional(readOnly=true) 降低資料庫鎖開銷hibernate.enable_lazy_load_no_trans 屬性,但不推薦長期依賴,掩蓋設計問題