哪个Hibernate FetchMode会导致集合被延迟加载?

4

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

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

简而言之,我有一个自定义的HQL查询,它连接了两个完全不相关的表,并且我正在尝试通过禁用存在于我的Hibernate映射POJO中的关联集合的加载来防止“O(N+1) selects”问题。

显然,我可以使用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。
1个回答

5
首先,我相信Hibernate的默认行为是使用延迟加载。因此,请检查是否已经这样设置。
然后,我认为他们在文档中误解了评论,并且SELECT应该真正成为一个懒加载(如果您检查最新版本的Hibernate文档,则“eagerly”一词被删除)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接