【发布时间】:2019-09-07 21:39:57
【问题描述】:
我有一个包含项目列表(集合)的用户类:
@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循环。
【问题讨论】:
-
第一种情况,懒惰的关联在会话打开的时候从不加载,但是你在会话关闭后尝试加载,所以没有办法从数据库中取出数据不再,因此例外。在第二种情况下,您在会话仍处于打开状态时加载惰性集合,因此一旦关闭,它仍然存在于内存中。
-
不应该将
user.getProject()加载到List<Project> projects吗?这是我感到困惑的部分。那为什么projects.size()会加载呢?
标签: java hibernate jsp servlets