【问题标题】:One Session Per Request Pattern with Spring MVC and Hibernate使用 Spring MVC 和 Hibernate 的每个请求模式一个会话
【发布时间】:2017-01-25 18:17:56
【问题描述】:

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

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

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

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

我想会有两种服务:

DealsOfDayService - 获取当天特价的所有菜肴

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

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

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

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

【问题讨论】:

  • 使用 Spring Boot 并相信它的事务管理。 (在任何情况下,通常最好在 Hibernate 上使用 JPA 特性。)

标签: java hibernate spring-mvc


【解决方案1】:

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

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

【讨论】:

  • 我会调查的。非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 2017-04-13
  • 2016-01-18
  • 1970-01-01
  • 2017-06-17
  • 2017-09-17
相关资源
最近更新 更多