java - 如何从 Hibernate 加载惰性集合?
问题描述
我目前Repository
在休眠中有实体(懒惰)。调用控制器时,我想在访问之前打开一个会话并加载存储库,repo.getIbId()
因为目前它会抛出 LazyInitializationException。在我的RepositoryDao
课堂上,我想在访问同上之前加载它们。这是我的几种方法:
在服务层使用 Hibernate.initialize(Repository.class)。老实说,我不确定这是怎么回事,因为我读到我需要有公开会议才能做到这一点。
在我的 Dao 层中,我可以
sessionFactory.getCurrentSession()
打开一个会话,然后在这里做一些事情,例如sessionFactory.getCurrentSession().get(Repository.class, ???)
但不确定在这里做什么。我可以从存储库中选择 * 来加载这个实体吗?
有没有更好的方法来处理这个?
解决方案
您需要一个活动的数据库连接/事务来访问延迟加载的关系。在 Spring 中,这是通过@Transactional
注解完成的。将此注释添加到使用您的存储库并加载关系的方法中。
几点注意事项:
- 将
@Transactional
注释放在存储库使用附近,例如不在控制器级别 @Transactional(readOnly = true)
当您只是从数据库中读取数据时使用,因为它的性能损失较小
推荐阅读
- javascript - 如何设置输入类型月份以便在循环月份时自动增加/减少年份?
- scheme - 通过在 Scheme 中折叠来获取列表的“与”
- apache - 如何在 php 7.4 上安装 ziparchive?
- html - 如何在 FullCalendar.io 时间线视图的资源列的一角只显示一种颜色?
- angular - 我想在带有角度材料的动态选项卡中创建一个动态选项卡
- javascript - 如何在 Angular 中通过 REST API 上传 CSV 文件?
- java - Java Hibernate 写入查询以对列表中的值求和
- c - 滚动条滑块行为
- android - 我的应用程序第一次运行,然后每次我尝试重新打开时都会崩溃
- c# - c# Word-AddIn 将 activeDocument 转换为虚拟 PDF 并将它们合并为一个 PDF 文档