Hibernate懶載入問題

2021-08-26 23:20:27 字數 848 閱讀 7962

剛開始接觸這種資料持久化框架時,使用的是maybatis,相較於最原始的jdbc+sql模式,maybatis簡直就是神器,特別是在用過maybatis動態sql後,簡直就開始對maybatis愛不釋手。後來工作要求,又接觸到了hibernate,剛入手時,還是很不適應的,感覺這個持久化框架已近偏離傳統的sql模式,一切都只能重新學習。用過一段時間hibernate後才發現了它的便利性。

之前問過公司的大佬,為啥要用maybatis,得到的答案:是出於效能的要求,由於資料量龐大,輕便的maybatis在效能上表現的更加優異。不過後來,隨著對hibernate認識的加深,才發現hibernate在效能上也並沒有落下。比如懶載入就很好的解決了hibernate效能方面的一些問題。在配置對映時,我們不可能說像maybatis一樣哪次用什麼我們就查什麼,hibernate的對映必須是完整的。所以這就導致了每次hibernate載入時都會更具對映關係把所有關聯資料查詢出來。但是其中很多可能是我們並不需要的。這就浪費了很多的系統資源,而hibernate懶載入就很好的解決了這個問題,通過**的方式,在你查詢乙個物件時,hibernate並不會立馬去查詢資料庫,而是生成乙個**物件,當你要獲取物件的屬性(字段)值時,才會去真正的查詢物件。不得不說這很有效。

但是這種方式也存在乙個問題,就是拿到**物件後,session忽然關閉了,這時再想去執行查詢的時候,就查不到資料了。而且還會丟擲org.hibernate.lazyinitializationexception。

一般來說這種問題是很容易被發現的,但是有些hibernate專案經常是使用了aspectj來進行切面處理的,這就使得lazyinitializationexception不那麼容易被發現了。可能自己查到了乙個物件,傳給了某個方法,之後再來獲取物件的屬性時就報錯了。

Hibernate懶載入策略

hibernate懶載入策略 概念 lazy的概念就是只有在真正使用物件時,才會去建立。對hibernate而言,就是真正載入時才發出載入sql語句。延遲載入機制是為了避免一些無謂的效能開銷而提出來的。重點牢記 1.load支援延遲載入,get不支援延遲載入。2.lazy的生命週期與session相...

hibernate懶載入原理

懶載入的意思是查詢的時候不會立刻訪問資料庫,而返回的是 物件,當真正去使用物件欄位的時候才會訪問資料庫。load object,serializable 前提實體類不能是final的。根據id查詢 查詢返回的是 物件,不會立刻訪問資料庫,是懶載入的。當真正去使用物件的時候才會訪問資料庫。用load的...

Hibernate懶載入策略

hibernate懶載入策略 概念 lazy的概念就是只有在真正使用物件時,才會去建立。對hibernate而言,就是真正載入時才發出載入sql語句。延遲載入機制是為了避免一些無謂的效能開銷而提出來的。重點牢記 1.load支援延遲載入,get不支援延遲載入。2.lazy的生命週期與session相...