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();