玩過hibernate的人都知道 ,hibernate爲了提高效率,採用了懶加載這個玩意,他好處很多,但是也存在着問題,比如2個類是1對多或者多對一的關係,我需要在view層顯示其中一個類的關聯類,那正常獲取就爆炸了,會報錯說session已經關閉什麼的,這個時候就需要取消懶加載,這裏有3種方式
1.將該類的lazy設置爲false,這種方式我是不推薦的,因爲有時需要懶加載,有時不需要。
2.通過 Hibernate.initialize();這個方法強制去加載.
3.通過opensessioninview的方式,其實就是一個過濾器,就是每次在發送請求的時候,打開session.那麼在view層就能獲取關聯類了,然後請求結束,關閉session,這個方式應該算是目前主流的解決懶加載的方式,唯一的缺點就是延長了session的生命週期。
這裏採用hibernate自帶的OpenSessionInViewFilter代碼如下
<!-- opsessioninview -->
<filter>
<filter-name>openSessionInview</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter </filter-class>
<init-param>
<param-name>sessionFactoryBeanName</param-name>
<param-value> sessionFactory</param-value>
</init-param>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>openSessionInview</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>