所謂延時載入就是懶載入(lazy),消極式載入。
什麼時候用懶載入呢,我只能回答要用懶載入的時候就用懶載入。
至於為什麼要用懶載入呢,就是當我們要訪問的資料量過大時,明顯用緩衝不太合適,因為記憶體容量有限 ,為了減少並發量,減少系統資源的消耗,
我們讓資料在需要的時候才進行載入,這時我們就用到了懶載入。懶載入的異常有很多種,你指的是不是session已經關閉的異常?因為那個初學者最容易遇到情況是當你載入出一個一對多關聯性的一這端的對象,然後在出了事務之後的地方,比如頁面上,還想再擷取多端對象裡面的除了id以外的屬性的時候,就會跑出這個異常。
我舉個例子,你有一個 Grade 對象關聯了 很多 Student 對象,並且用的是懶載入
你在service裡面通過資料庫查詢獲得了一個 Grade對象,這個對象裡面有一個Set<Student> students 集合,但是你並沒有對這個對象做進一步的處理(比如 intialize之類的操作讓懶載入的代理對象真正去執行個體化)
然後你到了頁面的展示的時候,去遍曆 students 這個集合,並且你試圖在頁面上顯示每個 student 的 name 屬性(這個屬性不是studentId) 這個時候就會拋出session已經關閉的異常
在SSH架構中:
可直接可以使用OpenSessionInViewFilter
在設定檔中配置
複製代碼 代碼如下:
<filter-name>opensession</filter-name>
<filter-class> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
<filter-mapping>
<filter-name>opensession</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
以上就是本文的全部內容了,希望小夥伴們能夠喜歡。