Нет, это не так (если только вы не хотите иметь над ними мелкий контроль). Вот что говорит Документация по теме:
Наборы результатов запроса также могут кэшироваться.
Это полезно только для запросов, которые
часто запускаются с тем же
параметры. Сначала вам нужно
включить кеш запросов:
hibernate.cache.use_query_cache true
Этот параметр создает два новых кэша
регионы: один держит кешированный запрос
наборы результатов
(org.hibernate.cache.StandardQueryCache
),
другие временные метки удержания
последние обновления для запросов
таблицы
(org.hibernate.cache.UpdateTimestampsCache
).
Обратите внимание, что кеш запросов не
кэшировать состояние реальных объектов
в наборе результатов; он только кеширует
значения идентификатора и результаты значения
тип. Кеш запросов должен всегда
использоваться вместе с
кэш второго уровня .
Большинство запросов не получают выгоды от
кэширование, поэтому по умолчанию запросы
не кэшируется. Чтобы включить кеширование, позвоните
Query.setCacheable(true)
. Этот звонок
позволяет запросу искать существующие
кэшировать результаты или добавлять свои результаты в
кеш при его выполнении.
Если вам требуется мелкозернистый контроль
политики истечения срока действия кэша запросов,
Вы можете указать именованную область кэша
для конкретного запроса, позвонив
Query.setCacheRegion()
.
List blogs = sess.createQuery("from Blog blog where blog.blogger = :blogger")
.setEntity("blogger", blogger)
.setMaxResults(15)
.setCacheable(true)
.setCacheRegion("frontpages")
.list();
Если запрос должен принудительно обновить
его область кэша запросов, вы должны
вызов
Query.setCacheMode(CacheMode.REFRESH)
.
Это особенно полезно в случаях
где основные данные, возможно, были
обновляется с помощью отдельного процесса (т.е.
не модифицируется через Hibernate) и
позволяет приложению выборочно
обновить конкретные наборы результатов запроса.
Это более эффективная альтернатива
выселению области кеша запросов
через SessionFactory.evictQueries()
.