簡體   English   中英

如何在 EclipseLink 中配置查詢緩存

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM