2011-04-07 53 views
1

我有一個person對象,它有一個地址列表,並且在映射中它被註釋爲被熱切地提取。jpa criteriabuilder query disable eager fetching

我有一個標準構建器查詢,比如說我想獲取一個人對象,但沒有獲取地址。我如何禁用標準查詢中的熱切會議。有沒有辦法?

實際的代碼不是這麼簡單...這只是給你一個例子。

在此先感謝

回答

2

在映射中使用LAZY獲取通常會更好,然後在需要時使用JPQL「join fetch」選項熱切地獲取它。

在JPA中,您可以從實體中選擇所需的數據,而不是整個實體,然後就可以避免這種關係。你也可以使用構造函數查詢來創建shell實例(注意這些不會被管理)。

在查詢中使一個渴望關係懶惰的方法是使用提取組。 JPA不支持提取組,但是一些JPA提供者,比如EclipseLink可以。在EclipseLink中,您可以使用@FetchGroup註釋或查詢提示來定義獲取組。

+0

我喜歡構造函數查詢的想法。我會嘗試一下。謝謝您的幫助 – user373201 2011-04-07 17:45:25

0

我認爲這是可能的。從OpenJPA documentation

您可以爲第9.1.1節「子類提取模式」中所述的具有元數據擴展名的單個類指定默認的子類提取模式。但是,請注意,您無法使用類設置「升級」運行時獲取模式。如果運行時獲取模式爲none,則無論您的元數據設置如何,都不會執行預先獲取的子類數據。
這也適用於渴望獲取模式元數據擴展(請參見第9.2.1節「Eager Fetch模式」)。您可以使用此擴展名禁用在字段上的提前提取或聲明集合寧願使用連接而不是並行選擇,反之亦然

第9.2.1節here