栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

强制休眠以热切加载多个关联而不更改映射

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

强制休眠以热切加载多个关联而不更改映射

通过使用稍微不同的方法,我找到了解决原始问题的方法。引用Hibernate ORM文档:

有时,需要在关闭会话之前初始化代理或集合。例如,您可以通过调用cat.getSex()或cat.getKittens()。size()来强制初始化。但是,这可能会使代码的读者感到困惑,并且对于通用代码而言并不方便。

静态方法Hibernate.initialize()和Hibernate.isInitialized()为应用程序提供了一种处理延迟初始化的集合或代理的便捷方法。只要其Session仍处于打开状态,Hibernate.initialize(cat)将强制初始化代理cat。Hibernate.initialize(cat.getKittens())对于收集小猫具有类似的效果。

只是简单地获取延迟集合(

a.getBlist()
)不会使其加载-
我最初犯了这个错误。如果我尝试从该集合中获取一些数据(获取项目,获取集合大小),它将加载。调用
Hibernate.initialize(..)
该集合将执行相同的操作。

因此,遍历实体关联及其各自的关联等,并

Hibernate.initialize()
在会话内明确初始化它们(例如使用),将在会话关闭后将所有内容加载到会话外可用。

使用该方法根本不使用条件提取模式(为什么它们不能按记录工作是另一个问题)。

这是N + 1问题的明显情况,但我可以接受。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/406207.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号