首页 >Java >java教程 >View 中的公开会话是正确的选择吗?陷阱和更好的选择

View 中的公开会话是正确的选择吗?陷阱和更好的选择

Linda Hamilton
Linda Hamilton原创
2024-12-02 14:16:121090浏览

Is Open Session in View the Right Choice? Pitfalls and Better Alternatives

Hibernate Open Session in View:陷阱和替代方案

Open Session in View 尽管其表面上很简单,但存在一些缺点,需要谨慎使用。

视图中开放会话的问题

虽然该方法可以缓解痛点在孤立的 JVM 场景中,这是有代价的:

  • UI 渲染中的自动提交模式:服务层事务完成、Session 关闭后,后续 UI 渲染会触发自动提交模式:
  • 提交每条语句,由于 I/O 过多而增加数据库负载。
  • 关注点分离丢失:
  • 语句生成跨越服务层和 UI 层,使集成测试和业务逻辑的隔离变得复杂。
  • 潜在的 N 1 查询问题:
  • UI 导航仅限于遍历关联,这可能会加剧性能问题未急切获取关联。
  • 连接租用时间增加:
  • 数据库连接可能在整个 UI 渲染过程中保持打开状态,从而导致拥塞和有限的事务吞吐量。

替代策略

要避免在视图中打开会话的陷阱,请考虑以下替代方案:
  • 急切获取:
  • 获取 EntityManager 中所有必要的关联范围,确保 UI 渲染期间不会触发延迟初始化。
  • 获取模式自定义:
  • 明智地使用 Hibernate 的 @BatchSize 和 FetchMode.SUBSELECT 注解来优化关联获取,而不影响所有业务场景。
  • 数据访问层查询:
  • 创建专门针对特定数据获取的定制查询特定用例的要求。

Spring Boot 配置

在 Spring Boot 中,默认启用在视图中打开会话。要禁用它,请在 application.properties 配置中设置以下属性:
spring.jpa.open-in-view=false

这将强制正确处理 LazyInitializationExceptions,避免与在视图中打开会话相关的不良后果。

以上是View 中的公开会话是正确的选择吗?陷阱和更好的选择的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn