gpt4 book ai didi

java - 遍历树 : Hibernate LazyFetch dto. getObjects() 与 Hibernate.initialize(dto.getObjects)

转载 作者:太空宇宙 更新时间:2023-11-04 08:08:37 27 4
gpt4 key购买 nike

出于某种原因,当我在 session 中使用 dto.getObjects() 时,它不会填充对象,但我必须使用 Hibernate.initialize(dto.getObjects)

谁能帮我解释一下原因吗?

附带问题,由于 hibernate 没有分层查询,因此遍历树的最佳方法是什么。有些树有 200 多个节点和 4 个级别。

我需要根据树中的每个节点的值和外部变量对其进行一系列更新。

示例:

node.setB(node.getA() + abc);

有什么意见吗?我更感兴趣的是知道原因而不是如何。

最佳答案

您应该将此问题分成两个问题,以获得最佳答案。关于 dto.getObjects() 代理初始化:仅仅调用 getter 是不够的,您需要调用集合上的访问器或修改器方法之一,以使 Hibernate 初始化代理。

这里的问题是,当您查询父对象时,Hibernate 介入并用代理对象替换子集合,而不是执行查询以获取您可能需要或不需要的信息。当您调用代理集合上的方法(例如 size())时,Hibernate 知道您想要实际使用该集合,因此它会运行到数据库并获取数据。如果您想立即获取集合,则需要配置关系才能执行此操作。有多种方法可以实现此目的,我们需要以下有关您的设置的信息来为您提供最好的帮助:

  • 实体配置(XML 与注释)
  • 查询模式(Criteria、HQL 或调用 load()/get())
  • 最好是有关您如何查询的简短代码示例

关于java - 遍历树 : Hibernate LazyFetch dto. getObjects() 与 Hibernate.initialize(dto.getObjects),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11640694/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com