java程式中的延時載入異常及解決方案_java

來源:互聯網
上載者:User

所謂延時載入就是懶載入(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>

以上就是本文的全部內容了,希望小夥伴們能夠喜歡。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.