首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >HQL:从急切表中获取联接集合

HQL:从急切表中获取联接集合
EN

Stack Overflow用户
提问于 2010-08-19 05:29:59
回答 2查看 17.5K关注 0票数 7

我有四张桌子:

代码语言:javascript
复制
RootNode // Will return multiple root nodes 
SubNode // Will return one sub node per root node
SubNodeChildren1 // Will return multiple for each sub node
SubNodeChildren2 // Will return multiple for each sub node

和类似的实体结构:

代码语言:javascript
复制
RootNode -> SubNode -> SubNodeChildren1
                    -> SubNodeChildren2

我需要一个查询,它将返回表中初始化了SubNodeSubNode子元素的所有RootNodesSubNode是急切获取的,而SubNode子级是延迟获取的。

我知道如何编写一个查询,该查询将LEFT OUTER JOIN FETCH表的直接子级并相应地初始化它们。但是,我不知道如何抓取从顶级表中获取的表的子表。

我尝试过这样的方法:

代码语言:javascript
复制
SELECT rn FROM RootNode AS rn LEFT OUTER JOIN FETCH rn.SubNode.SubNodeChildren1

但是,这总是给我一个错误,即所有者不是SELECT的一部分。

任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-19 12:06:51

Hibernate引用开始了

如果我们要递归连接获取另一个集合,我们可能需要别名的唯一原因是

这意味着您的查询应该重写为

代码语言:javascript
复制
select distinct 
    rn
from
    RootNode rn
left join fetch 
    rn.subNode sn
left join fetch 
    sn.subNodeChildren

您可以选择

禁用默认的subNode查询,通过使用HQL fetch=FetchType.EAGER - It (HQL查询)有效地覆盖关联和集合的映射文件的外连接和惰性声明(Hibernate参考文档),只检索您真正想要的内容。POJO在《行动》一书中支持这种方法。

或启用以fetch=FetchType.EAGER形式收集SubNodeChildren

以下内容摘自Hibernate常见问题解答(链接已被禁用(据我所知),但我在消失前保存了链接)

在MVC应用程序中,当视图试图访问所有代理和惰性集合时,我们如何确保它们都将被初始化?

一种可能的方法是在转发到视图时保持会话打开(和事务未提交)。例如,在servlet过滤器中呈现视图之后,会话/事务将被关闭/提交(另一个示例是在Maverick中使用ModelLifetime.discard()回调)。这种方法的一个困难是确保在呈现视图时出现异常时关闭/回滚会话/事务。

..。

另一种方法是使用Hibernate.initialize()简单地强制初始化所有需要的对象。这通常比听起来更简单。

票数 14
EN

Stack Overflow用户

发布于 2010-08-19 23:15:17

为了让查询正常工作,我必须在渴望的实体上执行INNER JOIN FETCH而不是LEFT OUTER JOIN FETCH

代码语言:javascript
复制
SELECT rn FROM RootNode AS rn INNER JOIN FETCH rn.SubNode AS sn LEFT OUTER JOIN FETCH sn.SubNodeChildren1 LEFT OUTER JOIN FETCH sn.SubNodeChildren2 ...

老实说,我仍然不能确切地确定为什么它在INNER JOIN FETCHLEFT OUTER JOIN FETCH上工作,但它肯定能完全按照我的需要工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3516873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档