2
我有一個實體是這樣的:瞭解FetchType.Lazy,在JPQL查詢力(OpenJPA中)
public class Configuration {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
@Element(name = "user_id", data = true, required = false)
private Users users;
}
我想是定義,其中一個時間執行惰性加載查詢,另一次不。
但查詢:
@NamedQuery(name = "getNondeletedConfiguration", query = "SELECT c FROM Configuration c "
+ "LEFT JOIN c.users users WHERE c.deleted = false"),
不會將用戶加載到該對象。
強制加載用戶對象的方法是訪問代碼中某處的屬性。然而,這是行不通的,我不希望這種行爲。我想僅基於我的JPQL語句來控制延遲加載。我不想讓openJPA神奇地加載對象,因爲它通過Java代碼中某處的get方法檢測到訪問。
我想這是一個常見問題,我只是誤解了一些東西。 但是,我找不到關於該問題的文檔。
謝謝我發現這篇文章,但你是該死的權利:) http://eubauer.de/kingsware/2011/02/10/override-fetch-type-in-jpql-queries/有沒有辦法防止ManyToOne關係被取回?在另一個查詢中,我希望ManyToOne關係不會被獲取(即使可能有人調用「getUser(s)」)。有沒有類似的方式來告訴JPQL查詢中的openJPA無法獲取對象? –
否。如果您需要,請使用DTO,而不是實體。 –
謝謝你的回答JB,不幸的是,用戶的「s」命名約定是一個很老的設計錯誤,很難修復。 –