Суть в следующем: вы можете либо вручную кэшировать результаты запроса, либо вы можете попросить Hibernate сделать это. Хотя обычно не имеет смысла ограничивать время жизни кэша запросов до сеанса, это можно сделать, используя следующий подход:
1) Включить кэш запросов
2) Выделите конкретный регион для рассматриваемого запроса и отметьте его как кешируемый:
Query query = ...;
query.setCacheable(true).setCacheRegion("MY_SPECIAL_QUERY");
3) Извлеките свой запрос из кэша в конце сеанса (если вы ДЕЙСТВИТЕЛЬНО уверены, что это именно то, что вы хотите сделать):
SessionFactory sessionFactory = ...;
sessionFactory.evictQueries("MY_SPECIAL_QUERY");