2013-05-05 37 views
1

雖然我有一個問題,JPA/EclipseLink沒有在L2共享緩存中緩存我的實體對象,因爲當我重複請求時,我會獲取SQL語句命中德比。當我調試這個時,我發現緩存完全工作,發生的事情是,只有entityManager.find請求不存在的實體(返回null)沒有被緩存(沒有對象來管理並保存在緩存中我想象的情況)。這些請求是每次都進入數據庫的請求。如何讓GlassFish/EclipseLink/JPA緩存返回null的entityManager.find結果

有沒有辦法讓系統(EclipseLink?)「緩存」以前請求的鍵不存在的事實,因此它可以在不敲擊數據庫的情況下返回null?

我使用的是Glassfish版本3.1.2.1。

回答

1

不能保證,因爲某些東西不曾存在,它永遠不會存在。一個常見的用例是檢查是否存在某個東西,如果它沒有創建它,那麼您需要小心緩存中不存在的東西。

對象緩存中沒有在EclipseLink中對此進行設置,但在查詢緩存中有一個設置。

如果您爲查找操作定義了命名查詢,則可以爲其啓用查詢緩存。默認情況下,查詢緩存會緩存一個空結果(這是可配置的)。

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Caching/Query_Cache