gpt4 book ai didi

java - 哪种 Hibernate FetchMode 会导致集合延迟加载?

转载 作者:搜寻专家 更新时间:2023-11-01 02:33:17 25 4
gpt4 key购买 nike

我在 Hibernate 论坛上问了这个问题,但没有得到完整的回复,所以我想我应该在这里重新发布它。这是原始问题线程:

http://forum.hibernate.org/viewtopic.php?f=1&t=1008243&p=2438963#p2438963

简而言之,我有一个自定义 HQL 查询,它将两个完全不相关的表连接在一起,我试图通过禁用我的关联集合的加载来防止“O(N+1) 选择”问题Hibernate 映射的 POJO。

显然,我可以使用 Hibernate fetch profiles为此,但有一个障碍。这是 Hibernate 的 FetchMode.java 所说的:

/**
* Fetch using an outer join. Equivalent to <tt>fetch="join"</tt>.
*/
public static final FetchMode JOIN = new FetchMode("JOIN");
/**
* Fetch eagerly, using a separate select. Equivalent to
* <tt>fetch="select"</tt>.
*/
public static final FetchMode SELECT = new FetchMode("SELECT");

/**
* Fetch lazily. Equivalent to <tt>outer-join="false"</tt>.
* @deprecated use <tt>FetchMode.SELECT</tt>
*/
public static final FetchMode LAZY = SELECT;

所以,“LAZY”并不是真正的懒惰,它只是“SELECT”,这正是我要避免的。

是否有阻止加载集合的获取模式?如果没有,是否有其他方法可以在特定 HQL 查询过程中禁用集合加载?

我意识到实现此目的的传统方法是使用 Criteria 查询,但我需要对任意属性进行连接,据我所知,没有 Criteria 可以做到这一点。

最佳答案

首先,我相信 hibernate 的默认行为是使用延迟加载。因此,请检查是否已经是这种情况。

然后,我相信他们误解了文档中的注释,SELECT 应该是一个惰性获取(如果你查看最新版本的 hibernate 的文档,'eagerly' 这个词是已删除)。

关于java - 哪种 Hibernate FetchMode 会导致集合延迟加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4351483/

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