У меня есть набор состояний, которые я хочу кэшировать на весь срок службы приложения, желательно после его первого вызова. Я использую 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)
}
)
})
Это, похоже, ничего не делает, хотя, если я отслеживаю запросы SQL, идущие на MySQL, он все равно делает выбор каждый раз, когда мой Session Bean использует этот NamedQuery.
Как правильно настроить этот запрос, чтобы он когда-либо считывался из базы данных только один раз, предпочтительно во всех сеансах?
Редактировать: я вызываю запрос следующим образом:
Query query = em.createNamedQuery("State.findAll");
List<State> states = query.getResultList();