2017-01-25 61 views
2

我開始一個項目與Spring MVC和Hibernate,我不完全理解數據訪問的最佳做法。一個會話每個請求模式與Spring MVC和休眠

經過一番研究,我明白我們應該使用不同的層(DAO層,服務層)來將業務邏輯從實際的數據庫交互中分離出來。

但是,我不知道如何保證每個HTTP請求只生成一個hibernate會話。

例如:假設我有一個餐廳的網頁,顯示兩個菜單:每日優惠菜單和廚師的特色菜餚。這兩個菜單都顯示在同一個網頁上。

我可以想象會有兩種服務:

DealsOfDayService - 獲取是在當天

ChefSpecialsService的交易所有的菜 - 獲得主廚推薦名單上的所有菜餚

但是,當用戶請求這個頁面時。控制器會調用兩種服務方法來檢索網頁所需的數據。但每次調用服務方法時,都會創建,使用和關閉新的hibernate會話。

我想知道如何使用只有一個hibernate會話來獲取這兩個列表,因爲打開每個服務操作的會話似乎非常昂貴。 (我猜我在問是否有辦法鏈接服務調用;因爲第二個服務以某種方式使用在第一個服務方法中創建的會話,而不需要創建新的會話)。

如果有人能指出我如何處理這個問題的正確方向,將不勝感激!

+0

使用Spring Boot,只是相信它的事務管理。 (在任何情況下,通常最好在Hibernate上使用JPA個性。) – chrylis

回答

2

您可以使用Spring框架中提供的OpenSessionInViewFilter。 這將適合您的要求。這個過濾器擴展了OncePerRequestFilter,它將確保每個Http請求打開一次hibernate會話。

This後將幫助您配置過濾器。

+0

我會研究這一點。非常感謝你 :) – Solace