在Spring MVC應用程序中處理延遲加載對象的最佳解決方案是什麼?我已經對此主題進行了一些搜索,並找到以下解決方案:延遲加載處理(Hibernate + Spring MVC)
打開會話:爲每個請求打開一個會話並在視圖呈現後關閉它。這個解決方案的問題是我需要延遲加載Spring MVC模型之外的對象(例如Junit測試用例)。關於此解決方案的另一個討論問題是異常處理如果事務在視圖呈現期間拋出異常怎麼辦?
明確打開會話:只要我需要延遲加載對象,就會明確地打開一個會話。其實這個解決方案應該可以工作,但我不認爲這是正確的方法。
使用AOP:創建一個在會話中包裝延遲加載方法的方面。這可能是一個解決方案,但我不知道我應該定義什麼級別的應用程序
創建自定義查詢:爲延遲加載創建查詢併爲急切加載查詢。這種解決方案實際上工作,但在我看來,延遲加載模式的錯誤應用
檢查OSIV優點/缺點這篇文章http://blog.jhades.org/open-session-in-view-pattern-pros-and-cons/ –
使用自定義查詢的問題是,他們強制加入到相關對象上,這並不總是最佳的解決方案。有時候,對於主對象有1個查詢並且對於相關對象有N個單獨的查詢更有效。 – Solubris
此外,其漂亮到查詢從遲緩裝載中分離的,因爲它意味着可以具有用於延遲加載一個方法(例如:loadRelationsRequiredByDefault()),這可以通過許多不同的查詢返回相同的對象被重新使用(或列表對象)。 – Solubris