首页 > Java > java教程 > 我应该在视图策略中使用 Hibernate 的 Open Session 吗?

我应该在视图策略中使用 Hibernate 的 Open Session 吗?

Linda Hamilton
发布: 2024-12-29 04:44:10
原创
171 人浏览过

Should I Use Hibernate's Open Session in View Strategy?

Hibernate Open Session in View 实践的缺点

概述

Hibernate 的 Open Session in View (OSIV) 策略附带有几个缺点,特别是在多 JVM 环境中以及需要立即提交事务时。尽管它在单 JVM 应用程序中提供了便利,但专家建议不要使用它。

OSIV 的问题

OSIV 的主要问题源于其非正统的数据检索方法。它在 UI 渲染期间保持持久性上下文打开,从而允许根据需要初始化惰性关联。这会带来多个缺点:

  • 渲染时自动提交:服务层事务完成后,UI 渲染触发的任何后续语句都会以自动提交模式执行,从而放置不必要的在数据库服务器上加载。
  • 模糊的关注点:服务层和 UI 层之间的关注点分离变得模糊,使得测试和隔离更加困难。
  • N 1 查询的潜力:UI 层限制可能导致 N 1 查询问题,从而影响性能。
  • 连接租用问题: OSIV 在整个 UI 渲染过程中持有数据库连接,限制事务吞吐量并可能导致池问题

避免 LazyLoadExceptions

除了依赖 OSIV,还可以采用替代策略来防止 LazyLoadExceptions:

  • 获取关联:在期间显式初始化关联服务方法调用。
  • 只读获取:将关联列表标记为只读,以防止意外代理。
  • 批量获取:使用 @ BatchSize 和 FetchMode.SUBSELECT 用于优化获取。
  • 数据访问层(DAL) 查询: 制作精确定义数据检索要求的自定义 DAL 查询。

在 Spring Boot 中禁用 OSIV

在 Spring Boot 中,OSIV默认启用。要禁用它,请将以下行添加到 application.properties 文件中:

spring.jpa.open-in-view=false
登录后复制

这将禁用 OSIV,允许开发人员以更合适的方式处理 LazyLoadExceptions。

以上是我应该在视图策略中使用 Hibernate 的 Open Session 吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板