[英]How To Configure Query Cacheing in EclipseLink
我有一組狀態,我想在應用程序的生命周期內緩存它們,最好是在第一次調用它之后。 我使用 EclipseLink 作為我的持久性提供程序。 在我的 EJB3 實體中,我有以下代碼:
@Cache
@NamedQueries({
@NamedQuery(
name = "State.findAll",
query = "SELECT s FROM State s",
hints = {
@QueryHint(name=QueryHints.CACHE_USAGE, value=CacheUsage.CheckCacheThenDatabase),
@QueryHint(name=QueryHints.READ_ONLY, value=HintValues.TRUE)
}
)
})
This doesn't seem to do anything though, if I monitor the SQL queries going to MySQL it still does a select each time my Session Bean uses this NamedQuery.
配置此查詢的正確方法是什么,以便它只從數據庫中讀取一次,最好是在所有會話中讀取?
編輯:我這樣調用查詢:
Query query = em.createNamedQuery("State.findAll");
List<State> states = query.getResultList();
此處發布的解決方案對我不起作用。 但我已經使它與:
@Cache
@NamedQueries({@NamedQuery(
name = "State.findAll",
query = "SELECT s FROM State s",
hints = {
@QueryHint(name = QueryHints.QUERY_RESULTS_CACHE, value = HintValues.TRUE)
}
)})
這里只是一個猜測,但你可以試試
query.cacheQueryResults();
在您創建它之后但在您getResultList
之前。
——馬庫斯
通過添加查詢提示,我得到了 EclipseLink 1.0.1 緩存:
Query query = em.createNamedQuery("Person.find");
query.setParameter("NAME", name);
query.setHint("eclipselink.cache-usage", "CheckCacheThenDatabase");
return (Person)query.getSingleResult();
我根本沒有更改實體,也沒有嘗試使用注釋配置緩存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.