我有一类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部分
延迟集合获取-当应用程序对该集合调用操作时,将获取集合。 (这是集合的默认设置。)
从实体返回集合并将其分配给变量不涉及在该集合上调用方法。