淺談hibernate急迫加載問題(多重外鍵關聯(lián))
數據庫結構如下
strategy中有外鍵member_id(關聯(lián)member表)外鍵strategy_category(關聯(lián)category表)而member表中有外鍵position_id(關聯(lián)positons表)
如果前臺頁面直接查詢stategy表中內容我們hql語句如果這么寫
Stringhql="FromStrategywhereid=:id";
控制臺會報nosession錯誤這是因為hibernate默認懶加載只有我們需要的時候才會將關聯(lián)的對象加載出來這里在我們前臺需要取關聯(lián)對象中的屬性的時候session已經關閉了額才會報這樣的錯誤
那么如何解決呢
這里建議使用leftjoinfetch的方式來加載對象而不是將注解中默認的懶加載改為急迫加載效率會很低
語句如下
Strategystrategy=(Strategy)sessionFactoryUtil.getSession() .createQuery("FromStrategysleftjoinfetchs.strategyCategoryleftjoinfetchs.memberleftjoinfetchs.member.positionswheres.id=:id") .setInteger("id",id).uniqueResult();
這里需要注意的是因為關聯(lián)的member表中又關聯(lián)了positions表所以需要一并加載出來另一個需要注意的是這里的s.id必須這么寫因為這里的每張表的主鍵名都為id如果不指明系統(tǒng)無法辨識
總結
以上就是本文關于淺談hibernate急迫加載問題(多重外鍵關聯(lián))的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關文章
基于Spring Security前后端分離的權限控制系統(tǒng)問題
本文給大家分享基于Spring Security前后端分離的權限控制系統(tǒng)問題,需要了解權限如何加載,權限匹配規(guī)則和登錄的實現(xiàn)代碼,對Spring Security權限控制系統(tǒng)相關知識感興趣的朋友一起看看吧2021-06-06spring security實現(xiàn)下次自動登錄功能過程解析
這篇文章主要介紹了spring security實現(xiàn)記住我下次自動登錄功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-11-11通過Maven進行jedis連接redis的實現(xiàn)
這篇文章主要介紹了通過Maven進行jedis連接redis的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07