Hibernate懶載入問題解決

2021-08-09 13:05:38 字數 1021 閱讀 4266

解決hibernate:could not initialize proxy-no session

出現的問題:不能初始化,沒有session(session關閉)

在hibernate中,中的lazy預設為proxy,這樣hibernate在資料庫中查詢資料時不會把關聯的物件查出來,而是儲存乙個獲取該值的方法:get***(),當我們需要使用這個值的時候,也就是使用get***()方法來呼叫的時候,hibernate就會利用這個方法從資料庫中獲取相應的資料。但是session已經關閉,這是因為hibernate懶載入的策略,在hibernate中使用sessionfactory來管理session,我們每進行一次資料庫操作時都會新建乙個session物件,當我們操作完成後,hibernate就會在dao層立即關閉session,這樣就嚴格控制session,避免出現低階錯誤。

對於這種錯誤,一般都會有三個方法可以解決

1、把lazy設成false,這個是最簡單的方法

2、使用opensessioninviewfilter。這個方法是將session交給servlet filter管理,每當乙個請求來之後就會開啟乙個session,只有當響應結束後才會關閉。如下:

hibernatefilter

org.springframework.orm.hibernate3.support.opensessioninviewfilter

hibernatefilter

/*

上面的配置檔案都是在web.xml中配置的

3、將hibernate的抓緊策略改為join,也就是left join fetch 或inner join fetch語法, 就是在中配置lazy="false" fetch="join" 即可。如:

Hibernate懶載入問題

剛開始接觸這種資料持久化框架時,使用的是maybatis,相較於最原始的jdbc sql模式,maybatis簡直就是神器,特別是在用過maybatis動態sql後,簡直就開始對maybatis愛不釋手。後來工作要求,又接觸到了hibernate,剛入手時,還是很不適應的,感覺這個持久化框架已近偏離...

Hibernate懶載入策略

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

hibernate懶載入原理

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