我有一类User,它具有一个项目列表(集合):

@OneToMany(mappedBy = "user_owner_id")
private Collection<Project> project = new ArrayList<>();


在某个时候,我想查看项目列表并获取它们:

Session sessionF = sessionFactory.openSession();
sessionF.beginTransaction();
user = sessionF.get(User.class, user.getId());
sessionF.getTransaction().commit();
List<Project> projects = (List<Project>) user.getProject();
sessionF.close();


如果我对projects不执行任何操作,则会引发错误:org.hibernate.LazyInitializationException: could not initialize proxy – no Session

但是,如果我要添加int projectCount = projects.size();,它就可以正常工作。为什么会发生这种情况?如何在不使用projects的情况下解决该问题?

附言关闭会话后,我只是将其传递通过HttpServletRequest,然后在jsp文件中进行for循环。

最佳答案

检查Hibernate参考文档的Fetching Strategies部分


  延迟集合获取-当应用程序对该集合调用操作时,将获取集合。 (这是集合的默认设置。)


从实体返回集合并将其分配给变量不涉及在该集合上调用方法。

07-27 18:46