如何解决 Hibernate 在迭代关系时出现“无法延迟初始化集合”异常
尝试从以下位置访问集合时会出现此问题当前会话中尚未完全初始化的实体。在这种情况下,在初始查询期间不会检索“主题”实体的“评论”集合,从而导致 Hibernate 异常。
要解决此问题,需要了解集合是通过以下方式延迟加载的:默认处于休眠状态。这意味着它们的元素不是在检索父实体时急切获取的,而是在实际访问它们时获取的。
要急切加载“comments”集合,请将“Topic”模型中的字段映射更新为:
@OneToMany(fetch = FetchType.EAGER, mappedBy = "topic", cascade = CascadeType.ALL) private Collection<Comment> comments = new LinkedHashSet<>();
通过将获取策略设置为 FetchType.EAGER,Hibernate 将在初始查询期间显式获取“comments”集合,确保访问“topicById”实例时,所有元素都可用。
此外,请考虑增加会话超时以适应长时间运行的操作,或使用 @OpenSessionInView 注释来确保 Hibernate 会话在 JSP 视图渲染期间保持打开状态。
以上是如何修复 Hibernate 的'无法延迟初始化集合”异常?的详细内容。更多信息请关注PHP中文网其他相关文章!