【问题标题】:Which Hibernate FetchMode will cause collections to be lazy-loaded?哪种 Hibernate FetchMode 会导致集合被延迟加载?
【发布时间】:2010-12-04 01:48:02
【问题描述】:

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

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

简而言之,我有一个自定义 HQL 查询,它将两个完全不相关的表连接在一起,我试图通过禁用加载我的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。

【问题讨论】:

    标签: java hibernate orm lazy-loading


    【解决方案1】:

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

    那么,我相信他们把文档中的 cmets 弄错了,SELECT 确实应该是一个懒惰的获取(如果你查看最新版本的 hibernate 的文档,'eagerly' 这个词被删除了)。

    【讨论】:

      猜你喜欢
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多