錯誤記錄(八)could not initialize proxy - no Session
推薦一個學習Java的小眾網站:https://www.javazhiyin.com/
在SSH整合專案中出現瞭如下錯誤資訊:
org.hibernate.LazyInitializationException:could not initialize proxy - no Session
org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:149)
org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:195)
org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
could not initialize proxy - no Session——翻譯為無法初始化沒有會話的代理物件
出現該錯誤的原因是Hibernate使用sessionFactory來管理session,我們每進行一次資料庫操作時都會新建一個session物件,當我們操作完成後,hibernate就會在dao層立即關閉該session。所以當我們操作類中另一個類的具體屬性時,因為session已經關閉,就會報錯。
這是Hibernate的懶載入策略,因為每一次查詢我們並不會使用到查詢物件關聯的所有物件,所有Hibernate在查詢資料庫時並不會把類關聯的物件統一查出來。
既然知道了錯誤的原因,就很好解決了。
第一種辦法:
最直接的辦法就是把Hibernate的懶載入機制關閉,方法:
在對映檔案中多對一對映處寫 : azy="false"
但是這種辦法不推薦,取消懶載入之後每次查詢用不用得到的物件都要載入出來,很影響效率。
第二種辦法:
不要Hibernate去管理session,而是將session交給servlet filter來管理,每當接收一個請求後就會開啟一個session,只有當響應結束後才會關閉。
具體做法:
在web.xml中配置:
<filter-name>hibernateFilter</filter-name>
<filter-class> org.springframework.orm.hibernate4.support.OpenSessionInViewFilter </filter-class>
</filter
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
這樣就解決了could not initialize proxy - no Session錯誤,記錄下來,避免再錯。
安利一個,關注後端技術精選,號內回覆“學習資料”,領取100套小程式原始碼+小程式開發視訊和Java經典書籍電子版!
相關文章
- could not initialize proxy - no SessionSession
- Many To Many could not initialize proxy – no Session的解決方法Session
- 錯誤記錄(九)Could not obtain transaction-synchronized Session for current threadAIsynchronizedSessionthread
- V$SESSION記錄的BLOCKING_SESSION錯誤SessionBloC
- Could not initialize class sun.awt.X11GraphicsEnvironment 報錯
- 【MySQL】Could not initialize master info structureMySqlASTStruct
- Kafka錯誤記錄Kafka
- 記錄錯誤並繼續執行:錯誤事件記錄子句 --轉事件
- C++錯誤記錄C++
- SpringMVC錯誤記錄SpringMVC
- 64位linux報錯Could not initialize class java.awt.image.BufferedImageLinuxJava
- Golang 學習筆記八 錯誤異常Golang筆記
- 錯誤記錄:apache預設網頁訪問錯誤Apache網頁
- JS錯誤記錄 – dom操作 – 排序JS排序
- 假資料填充錯誤記錄
- virtualbox 錯誤解決記錄
- 記錄一次根據錯誤資訊無法定位錯誤的錯誤
- Could not initialize class org.apache.xpath.compiler.FunctionTableApacheCompileFunction
- Go:錯誤 could not launch process: EOF 解決Go
- 錯誤 - Could not find the index entry for RIDIndex
- MongoDB的一次錯誤記錄MongoDB
- postgresal使用錯誤解決 (記錄篇)
- Qt 錯誤記錄registered using qRegisterMetaType().QT
- su - root could not open sessionSession
- PL/SQL 連線 Oralce 提示 Could not initialize oci.dllSQL
- 實體類註解錯誤:Could not determine type for:
- Oracle RAC 錯誤記錄以及處理方法Oracle
- Could not initialize class sun.awt.X11GraphicsEnvironment解決方案
- 懶載入未用就關閉sessio--n的異常---面試問的-org.hibernate.LazyInitializationException: could not initialize proxy -面試Exception
- 如何處理錯誤資訊 Pricing procedure could not be determined
- Mysql啟動錯誤-server PID file could not be foundMySqlServer
- 【轉】WARNING:Could not lower the asynch I/O limit 錯誤MIT
- vagrant homestead 錯誤記錄以及解決方案
- Docker環境編譯時的錯誤記錄Docker編譯
- php安全配置記錄和常見錯誤梳理PHP
- hadoop 安裝錯誤記錄(持續更新)Hadoop
- 【SQL*Plus】使用11g SQL*Plus的errorlogging選項記錄session級別的錯誤SQLErrorSession
- su - xxx Could not create sessionSession