簡體   English   中英

哪個Hibernate FetchMode會導致集合被延遲加載?

[英]Which Hibernate FetchMode will cause collections to be lazy-loaded?

我在Hibernate論壇上問過這個問題,但沒有得到完整的答復,所以我想我會在這里重新發布。 這是原始問題主題:

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

簡而言之,我有一個自定義HQL查詢將兩個完全不相關的表連接在一起,我試圖通過禁用加載我的Hibernate映射中存在的關聯集合來防止“O(N + 1)選擇”問題的POJO。

顯然,我可以使用Hibernate 獲取配置文件 ,但有一個障礙。 這是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的文檔,那么'急切'這個詞就被刪除了)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM