2012-06-12 17 views
5

使用JPA EntityManager和JPA Query對象,如何重寫某些註釋@OneToMany(fetch = FetchType.EAGER)以在查詢中延遲獲取?如何在運行時重寫FetchType.EAGER以使其延遲

如果我有hibernate查詢對象,我可以讓它創建一個條件對象並使用它,將獲取類型設置爲懶惰。但是我必須使用JPA查詢對象。有沒有解決這個問題的方法?

+0

是的,你可以 - http://stackoverflow.com/questions/4388486/fetchmode-in-jpa-2-criteriaquery –

+0

看到這個:http: //stackoverflow.com/questions/17847289/ignore-a-fetchtype-eager-in-a-relationship。 – Dherik

回答

4

即使使用原生Hibernate API,也無法做到這一點。如果一個關聯被定義爲EAGER,它總是被急切地加載,並且沒有辦法改變使用查詢的方式。

反過來是不正確的:您可以使用查詢熱切加載一個惰性關聯。

+0

該死的。謝謝,是的,我一直在使用HQL中的fetch-keyword來做到這一點。 – hugelgupf

-1

查看Hibernate獲取配置文件或JPA實體圖。這個問題已經在2012年問你問題了。

+0

這個問題還沒有解決,請參閱:https://hibernate.atlassian.net/browse/HHH-8776 - 即使使用EntityGraphs也不可能忽略EAGER加載。 –

+0

啊,我的歉意,無視我的答案。典型的用例是相反的 - 將你的實體標記爲懶惰提取,並使用實體圖在運行時更改提取類型。我不知道HHH-8776,很高興知道,謝謝。 – mancini0