Middle
57
questionbank

Какие уровни кэширования существуют в Hibernate?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Hibernate поддерживает три уровня кэширования:

  1. Кэш первого уровня (Session Cache):

    • Кэш ассоциации Session с объектами.
    • По умолчанию включен.
    • Жизненный цикл связан с жизнью объекта Session.
    • Hibernate проверяет этот кэш перед выполнением запросов к базе данных.
    • Если объект найден в кэше сессии, возвращается его копия без обращения к БД.
  2. Кэш второго уровня (SessionFactory Cache):

    • Опциональный кэш, совместно используемый всеми Session, созданными из одного SessionFactory.
    • Требует явной конфигурации и выбора поставщика кэша (например, Ehcache, Infinispan).
    • Хранит считанные из БД объекты, коллекции и результаты запросов.
    • Значительно повышает производительность при частом чтении одних и тех же данных.
  3. Кэш запросов (Query Cache):

    • Опциональный кэш, хранящий не сами объекты, а результаты запросов (идентификаторы объектов).
    • Требует включения как второго уровня кэширования, так и самого Query Cache.
    • При выполнении запроса Hibernate проверяет, имеется ли уже кэшированный результат для этого запроса и его параметров.
    • Если результат найден, Hibernate извлекает соответствующие объекты из кэша второго уровня или, при их отсутствии, из БД, используя кэшированные идентификаторы.

Конфигурация второго уровня кэширования в hibernate.cfg.xml:

xml

Аннотация для кэширования сущности:

java

Стратегии параллельного доступа для кэша второго уровня:

СтратегияОписание
NONEКэширование отключено.
READ_ONLYДанные никогда не модифицируются после кэширования. Самая быстрая.
NONSTRICT_READ_WRITEДанные могут изменяться. Нет гарантии согласованности при одновременных изменениях из разных сессий.
READ_WRITEДанные могут изменяться. Гарантируется согласованность. Использует блокировки.
TRANSACTIONALДанные могут изменяться. Гарантируется согласованность в рамках JTA транзакций.