Кеш запросов - действительно простой механизм, который хранит результаты для определенного ключа.В случае нативного запроса этим ключом будет сам запрос и все его параметры.
Так, например, ключ может быть:
*----------------------------------------------------------------------------------------*
| Query Cache |
|----------------------------------------------------------------------------------------|
| ["select * from table as t where t.id=? and p.column=?", [ 1 , "value"] ] -> [ 2 ] ] |
*----------------------------------------------------------------------------------------*
С этой точки зрения каждый запрос можетбыть кэшированным - в определенных сценариях.Конечно, запрос должен обрабатываться классами Hibernate, а не напрямую через соединение JDBC.
И, кстати, легко узнать, будет ли ваш запрос использовать кеш запросов или нет!Все это находится в файлах журналов под org.hibernate.cache
.
И во всех них есть большой улов - если вы запустите свой собственный запрос, он вытеснит все сущности и записи из кэша второго уровня!По крайней мере, до последней версии, которую я использовал!Таким образом, вы можете нормально использовать собственные запросы, но поскольку Hibernate не может решить, что они делают, он очистит кэш, чтобы избежать изменений данных, выполненных этим запросом, не отраженных в объектах кэша.
Таким образом, существует целоемного проблем с кешем запросов, и вы должны рассмотреть, действительно ли вы хотите использовать эту функцию! Взгляните на эту статью или на эту .Я стараюсь избегать использования кешей запросов в своей работе, я использую SLC только для сущностей ...