8 Stimmen

So konfigurieren Sie das Query Caching in EclipseLink

Ich habe eine Sammlung von Zuständen, die ich für die Lebensdauer der Anwendung zwischenspeichern möchte, vorzugsweise nachdem sie zum ersten Mal aufgerufen wird. Ich verwende EclipseLink als meinen Persistenzanbieter. In meiner EJB3 Entität habe ich den folgenden Code:

@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)
            }
    )
})

Dies scheint jedoch nichts zu tun, wenn ich die SQL-Abfragen überwachen, die an MySQL gehen, tut es immer noch ein Select jedes Mal, wenn meine Session Bean diese NamedQuery verwendet.

Wie lässt sich diese Abfrage richtig konfigurieren, so dass sie nur einmal aus der Datenbank gelesen wird, vorzugsweise über alle Sitzungen hinweg?

Bearbeiten: Ich rufe die Abfrage wie folgt auf:

Query query = em.createNamedQuery("State.findAll");
List<State> states = query.getResultList();

9voto

Die hier geposteten Lösungen haben bei mir nicht funktioniert. Aber ich habe es gemacht, mit zu arbeiten:

@Cache
@NamedQueries({@NamedQuery(
      name = "State.findAll",
      query = "SELECT s FROM State s", 
      hints = {
          @QueryHint(name = QueryHints.QUERY_RESULTS_CACHE, value = HintValues.TRUE)
      }
    )})

0voto

MarkusQ Punkte 21488

Dies ist nur eine Vermutung, aber Sie könnten es versuchen

query.cacheQueryResults();

nachdem Sie es erstellt haben, aber bevor Sie getResultList .

-- MarkusQ

0voto

tputkonen Punkte 5379

Ich habe den EclipseLink 1.0.1 Cache zum Laufen gebracht, indem ich nur den Query Hint hinzugefügt habe:

Query query = em.createNamedQuery("Person.find");
query.setParameter("NAME", name);      
query.setHint("eclipselink.cache-usage", "CheckCacheThenDatabase");
return (Person)query.getSingleResult();

Ich habe die Entität überhaupt nicht verändert und noch nicht versucht, den Cache mithilfe von Anmerkungen zu konfigurieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X