SSH - org.hibernate.LazyInitializationException: could not initialize proxy - no Session問題解決辦法

最近用hibernate一對多查詢的時候獲取外鍵所對應的表的字段時總是報如下錯誤:

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

在網上看了相關的問題解決方案覺得是lazy的關係,就是默認開啓了懶查詢導致的,於是又搜索了一大堆關於lazy的設置方法,在hibernate配置中手動設置lazy和在web.xml文件中添加filter,問題都沒能解決,左右思考半天網上看到一篇關於session 的帖子把我的問題解決了。

其實我的hibernate配置文件都是myeclipse自動生成的,myeclipse幫我們做好的東西一般是沒有錯誤的,關鍵在於我的dao層裏的增刪改查各個方法寫的不對,hibernate中如果要使用lazy的話,除了需要配置以外,還需要當前hibernate的session沒有關閉,而我使用的dao文件裏本來是沒有考慮這個的,在每個方法裏都把session給關閉了,以至於後來出現了問題,所以,解決方法就是每個session使用後提交但不關閉就可以了,這樣當調用lazy的時候就不會出現on session啦!很簡單吧。

問題是解決了,但session一直開着是不是有點浪費資源呢?於是在/hibernate.cfg.xml中添加下面這一句:

<property name="current_session_context_class">thread</property>

這句的作用就是把session交給線程來管理,線程自動關閉session。相信還有一些像我這樣的新手遇到類似的問題,這裏貼出來和大家一起分享,

<PS:第一帖,留此紀念!>

 

發佈了21 篇原創文章 · 獲贊 8 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章