最近用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:第一帖,留此紀念!>