首页 > 解决方案 > 如何从 Hibernate 加载惰性集合?

问题描述

我目前Repository在休眠中有实体(懒惰)。调用控制器时,我想在访问之前打开一个会话并加载存储库,repo.getIbId()因为目前它会抛出 LazyInitializationException。在我的RepositoryDao课堂上,我想在访问同上之前加载它们。这是我的几种方法:

  1. 在服务层使用 Hibernate.initialize(Repository.class)。老实说,我不确定这是怎么回事,因为我读到我需要有公开会议才能做到这一点。

  2. 在我的 Dao 层中,我可以sessionFactory.getCurrentSession()打开一个会话,然后在这里做一些事情,例如sessionFactory.getCurrentSession().get(Repository.class, ???)但不确定在这里做什么。我可以从存储库中选择 * 来加载这个实体吗?

有没有更好的方法来处理这个?

标签: javaspringhibernate

解决方案


您需要一个活动的数据库连接/事务来访问延迟加载的关系。在 Spring 中,这是通过@Transactional注解完成的。将此注释添加到使用您的存储库并加载关系的方法中。

几点注意事项:

  • @Transactional注释放在存储库使用附近,例如不在控制器级别
  • @Transactional(readOnly = true)当您只是从数据库中读取数据时使用,因为它的性能损失较小

推荐阅读