2011-12-03 210 views
4

在我的應用程序中,當用戶登錄系統時,系統從DB讀取一些設置並將它們存儲在用戶的會話中。系統通過使用EclipseLink的JPA查詢執行此操作(JPA 2.0)。禁用EclipseLink緩存

當我更改數據庫中的某些設置並重新登錄時,查詢將返回以前的結果。看來EclipseLink正在緩存結果。

我已經使用這個來糾正這種行爲,但它不工作

query.setHint(QueryHints.cache_usage,cacheUsage.no_cache); 

回答

6

如果你想設置查詢提示,則docs建議這樣做:

query.setHint("javax.persistence.cache.storeMode", "REFRESH"); 

或者,您可以設置受影響的實體的@Cacheable註釋

@Cacheable(false) 
public class EntityThatMustNotBeCached { 
... 
} 
3

如果你返回某種配置實體,並希望確保數據不陳舊,你在從查詢中返回實體後可以調用em.refresh(yourEntity)。這將迫使JPA提供者從數據庫中獲取新數據,儘管緩存了一個。

如果您希望禁用您可以在persistence.xml<persistence-unit>使用<shared-cache-mode>NONE</shared-cache-mode>或直接在您的配置實體使用Cacheable(false) L2高速緩存。

如果您要返回普通字段而不是實體,並且仍舊收到過時的數據,則可以嘗試通過調用em.clear()來清除PersistenceContext