Hibernate именованный запрос БД или кеш? - PullRequest
2 голосов
/ 28 февраля 2012

Мы используем Hibernate в нашем проекте. Мой вопрос касается именованных запросов. Может кто-нибудь подсказать мне, как именованные запросы обрабатываются Hibernate. Если Hibernate настроен на использование кеша уровня 1, он также будет возвращать результаты для именованного запроса из кеша или всегда будет совершать поездки в базу данных?

1 Ответ

2 голосов
/ 28 февраля 2012

Кэш уровня 1 - это сеанс Hibernate.За исключением очень редкого случая, когда используется сеанс без сохранения состояния, по умолчанию существует кэш 1-го уровня.Результаты запросов никогда не кэшируются в кэше уровня 1.Я думаю, что вы имели в виду «кэш второго уровня».

Именованные запросы обрабатываются точно так же, как и безымянные запросы в отношении кеша.

Запросы могут кэшироваться или нет.Если они кэшированы, можно избежать обращения к базе данных.Независимо от того, кэшированы они или нет, если они возвращают экземпляры сущностей, которые находятся в кэше второго уровня, запрос вернет идентификаторы, а затем сами сущности будут загружены из кэша второго уровня.

См. Hibernate 2-го уровня кэш-памяти в приложении Grails и справочную документацию для получения дополнительной информации.

...