你应该在视图模式中使用 Hibernate 的 Open Session 吗?
Hibernate 在视图模式中打开会话的缺点
Hibernate 在视图中打开会话 (OSIV) 模式在整个请求的整个过程中维护一个打开会话生命周期。虽然这种方法看起来很方便,但它有几个陷阱:
1。缺乏事务控制
OSIV 允许在托管事务之外进行数据操作,从而导致数据不一致。 UI 渲染期间执行的每个语句都以自动提交模式发生,这会增加 I/O 开销并可能损害数据库性能。
2.混合关注点
OSIV 模糊了服务层和 UI 层之间的分离,因为语句是由两者生成的。这使得测试变得复杂,并且使得隔离层变得更加困难。
3. N 1 查询性能问题
OSIV 将 UI 层限制为导航关联,这可能会导致 N 1 查询问题。虽然 Hibernate 提供了 @BatchSize 和 FetchMode.SUBSELECT 等缓解措施,但它们会影响默认的获取计划,并且可能并非适合所有场景。
4.资源管理
OSIV 在整个 UI 渲染阶段保持数据库连接打开。这种延长的连接租用可能会在连接池中造成拥塞,从而限制可扩展性和吞吐量。
OSIV 的替代方案
要在解决 OSIV 的限制的同时避免 LazyLoadExceptions,请考虑以下这些替代策略:
- 渴望获取:在服务层中急切地初始化所有必需的关联,以避免延迟加载错误。
- FetchMode.JOIN:在查询中使用 FetchMode.JOIN 来急切地加载特定关联。
- 批量获取:利用@BatchSize批量获取关联并改进
- DTO 投影: 创建封装相关数据的 DTO(数据传输对象),而不包含惰性关联。
在 Spring Boot 中禁用 OSIV
在 Spring Boot 中,OSIV 默认启用。要禁用它,请将以下属性添加到您的 application.properties 配置文件中:
spring.jpa.open-in-view=false
通过禁用 OSIV,您可以更好地控制数据获取、确保事务完整性并提高应用程序性能。
以上是你应该在视图模式中使用 Hibernate 的 Open Session 吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

公司安全软件导致部分应用无法正常运行的排查与解决方法许多公司为了保障内部网络安全,会部署安全软件。...

系统对接中的字段映射处理在进行系统对接时,常常会遇到一个棘手的问题:如何将A系统的接口字段有效地映�...

在使用MyBatis-Plus或其他ORM框架进行数据库操作时,经常需要根据实体类的属性名构造查询条件。如果每次都手动...

将姓名转换为数字以实现排序的解决方案在许多应用场景中,用户可能需要在群组中进行排序,尤其是在一个用...

在使用IntelliJIDEAUltimate版本启动Spring...

Java对象与数组的转换:深入探讨强制类型转换的风险与正确方法很多Java初学者会遇到将一个对象转换成数组的�...

电商平台SKU和SPU表设计详解本文将探讨电商平台中SKU和SPU的数据库设计问题,特别是如何处理用户自定义销售属...

在使用TKMyBatis进行数据库查询时,如何优雅地获取实体类变量名以构建查询条件,是一个常见的难题。本文将针...
