hibernate錯誤:could not initialize proxy - no Session

 could not initialize proxy - no Session
 at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:86)
 at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:140)
 at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)

 

只需<many-to-one>中屬性lazy設置爲false即可。由於其默認爲proxy

 

延遲加載, 也就是用到的時候纔去加載.這樣可以提高一些性能.
Hibernatelazy loading 採用了一個HibernateSession來管理session,它的邏輯是每進行一次數據庫操作,就開新的session,操作完成後立即關閉該session。這樣做的好處是可以嚴格關閉session,避免菜鳥級的錯誤,但是hibernate.org並不推薦這麼做。因爲這不適合lazy loading,也不適合跨方法的事務。

比如在我們的應用中,user->post形成一對多的映射,User中有一個包含postList

User中,有多個屬性:namepasswordphone等,還有一個List類型的posts。當我們對posts使用lazy laoding的時候,hibernate會在獲得User對象的時候,僅僅返回name,password,phone等基本屬性,當你訪問posts的時候,它纔會從數據庫中提取posts需要的數據,這就是所謂lazy laoding。但是在我們的系統中,session是被立即關閉的,也就是在讀取了name,password,phone等基本屬性後,session已經close了,再進行lazy loaiding
就會有異常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章