Когда Hibernate читает из кэша второго уровня, а когда из БД? - PullRequest
1 голос
/ 23 октября 2008

Насколько я знаю, Hibernate позволяет вам настраивать сущности и коллекции для хранения в кэше второго уровня.

Когда Hibernate пытается прочитать эти кэшированные объекты из кэша второго уровня и когда он попадает в БД? Читает ли Hibernate только из кэша второго уровня при загрузке сущностей путем вызова Sesssion.get() и при инициализации прокси (включая коллекции)? Hibernate когда-либо попадает в кэш второго уровня при выполнении HQL- или Criteria-Queries?

Примеры

Ответы [ 2 ]

4 голосов
/ 21 января 2011

Кэш 2-го уровня содержит только сущности по их идентификаторам, поэтому при извлечении сущности по идентификатору (т.е. неявным образом загружают, загружают или разрешают прокси) можно получить доступ к кэшу 2-го уровня. Любые другие запросы (hal, критерии) будут обходить кеш и попадать в БД - по крайней мере, если кеш запросов не используется.

2 голосов
/ 23 октября 2008

(Примечание: самый простой способ ответить на этот тип вопросов - включить show_sql и посмотреть, какие запросы генерирует Hib.)

Иногда запрос возвращает только PK записей (например, для итерационных запросов), и тогда Hib может использовать кеш.

При извлечении связанных объектов также может использоваться кеш.

Хотя я не могу дать вам точное правило здесь. Я также подозреваю, что ответ зависит от используемых диалектных возможностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...