1

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

有人可以向我解释原因吗?

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

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

例子:

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

任何意见?我更感兴趣的是知道为什么而不是如何。

4

1 回答 1

1

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

这里的问题是,当您查询父对象时,Hibernate 介入并用代理对象替换了子集合,而不是执行查询以获取您可能需要或不需要的信息。当你在代理集合上调用一个方法,比如 size() 时,Hibernate 知道你想要实际使用这个集合,所以它会跑到 DB 并获取数据。如果您想急切地获取集合,则需要配置关系来执行此操作。有几种方法可以做到这一点,我们需要有关您的设置的以下信息以最好地帮助您:

  • 实体配置(XML 与注释)
  • 查询模式(Criteria、HQL 或调用 load()/get())
  • 最好是您查询方式的简短代码示例
于 2012-07-24T23:52:20.667 回答