使用Spring MVC和Hibernate的每个请求模式一个会话

时间:2017-01-25 18:17:56

标签: java hibernate spring-mvc

我正在使用Spring MVC和Hibernate开始一个项目,但我并不完全了解数据访问的最佳实践。

经过一些研究,我了解到我们应该使用不同的层(DAO层,服务层)来将业务逻辑与实际的数据库交互分开。

但是,我不知道如何保证每个HTTP请求只生成一个hibernate会话。

例如:假设我有一个餐厅的网页,显示两个菜单:每日特价菜单和厨师特色菜。两个菜单都显示在同一个网页上。

我想会有两种服务:

DealsOfDayService - 获取当天优惠的所有菜肴

ChefSpecialsService - 获取厨师特价列表中的所有菜肴

但是,当用户请求此页面时。控制器将调用两种服务方法来检索网页所需的数据。但每次调用服务方法时,都会创建,使用和关闭新的hibernate会话。

我想知道如何只使用一个hibernate会话来获取两个列表,因为为每个服务操作打开一个会话似乎非常昂贵。 (我想我在问是否有办法连接服务调用;因为第二个服务以某种方式使用在第一个服务方法中创建的会话,避免了创建新会话的需要。)

如果有人能指出我如何处理这个问题的正确方向,我们将不胜感激!

1 个答案:

答案 0 :(得分:2)

您可以使用Spring Framework中提供的OpenSessionInViewFilter。 这符合您的要求。此过滤器扩展OncePerRequestFilter,这将确保每个Http请求打开一次休眠会话。

This帖子将帮助您配置过滤器。