出于某种原因,当我在会话中使用dto.getObjects()
时,它不会填充对象,但我必须使用Hibernate.initialize(dto.getObjects)
。
有人可以向我解释原因吗?
附带问题,在休眠状态下遍历树的最佳方法是什么,没有分层查询。有些树有200个节点和4个层次。
我需要根据它的值和外部变量对树中的每个节点执行一系列更新。
示例:
node.setB(node.getA() + abc);
任何评论?我更想知道原因而不是如何。
答案 0 :(得分:1)
你应该把它分成两个问题,以便找到答案的最佳机会。关于dto.getObjects()代理初始化:仅仅调用getter是不够的,你需要调用集合中的一个accessor或mutator方法让Hibernate初始化代理。
这里的问题是,当您查询父对象时,Hibernate介入并用代理对象替换子集合,而不是执行查询以获取您可能需要或可能不需要的信息。当您调用一个方法(如代理集合上的size())时,Hibernate知道您希望实际使用该集合,因此它会耗尽到DB并获取数据。如果您想要急切地获取集合,则需要配置关系来执行此操作。有几种方法可以做到这一点,我们需要以下有关您的设置的信息,以便最好地帮助您: