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中文网其他相关文章!

JVM'SperformanceIsCompetitiveWithOtherRuntimes,operingabalanceOfspeed,安全性和生产性。1)JVMUSESJITCOMPILATIONFORDYNAMICOPTIMIZAIZATIONS.2)c提供NativePernativePerformanceButlanceButlactsjvm'ssafetyFeatures.3)

JavaachievesPlatFormIndependencEthroughTheJavavIrtualMachine(JVM),允许CodeTorunonAnyPlatFormWithAjvm.1)codeisscompiledIntobytecode,notmachine-specificodificcode.2)bytecodeisisteredbytheybytheybytheybythejvm,enablingcross-platerssectectectectectross-eenablingcrossectectectectectection.2)

TheJVMisanabstractcomputingmachinecrucialforrunningJavaprogramsduetoitsplatform-independentarchitecture.Itincludes:1)ClassLoaderforloadingclasses,2)RuntimeDataAreafordatastorage,3)ExecutionEnginewithInterpreter,JITCompiler,andGarbageCollectorforbytec

JVMhasacloserelationshipwiththeOSasittranslatesJavabytecodeintomachine-specificinstructions,managesmemory,andhandlesgarbagecollection.ThisrelationshipallowsJavatorunonvariousOSenvironments,butitalsopresentschallengeslikedifferentJVMbehaviorsandOS-spe

Java实现“一次编写,到处运行”通过编译成字节码并在Java虚拟机(JVM)上运行。1)编写Java代码并编译成字节码。2)字节码在任何安装了JVM的平台上运行。3)使用Java原生接口(JNI)处理平台特定功能。尽管存在挑战,如JVM一致性和平台特定库的使用,但WORA大大提高了开发效率和部署灵活性。

JavaachievesPlatFormIndependencethroughTheJavavIrtualMachine(JVM),允许Codetorunondifferentoperatingsystemsswithoutmodification.thejvmcompilesjavacodeintoplatform-interploplatform-interpectentbybyteentbytybyteentbybytecode,whatittheninternterninterpretsandectectececutesoneonthepecificos,atrafficteyos,Afferctinginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginging

JavaispoperfulduetoitsplatFormitiondence,对象与偏见,RichstandardLibrary,PerformanceCapabilities和StrongsecurityFeatures.1)Platform-dimplighandependectionceallowsenceallowsenceallowsenceallowsencationSapplicationStornanyDevicesupportingJava.2)

Java的顶级功能包括:1)面向对象编程,支持多态性,提升代码的灵活性和可维护性;2)异常处理机制,通过try-catch-finally块提高代码的鲁棒性;3)垃圾回收,简化内存管理;4)泛型,增强类型安全性;5)ambda表达式和函数式编程,使代码更简洁和表达性强;6)丰富的标准库,提供优化过的数据结构和算法。


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3 Linux新版
SublimeText3 Linux最新版

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。