Sobes.tech
Middle
84
questionbank

Что такое кэширование в Hibernate?

Ответ от нейросети

sobes.tech AI

Кэширование в Hibernate — это механизм хранения данных в памяти для сокращения количества запросов к базе данных, что повышает производительность приложения.

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

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

    • Включен по умолчанию и связан с объектом Session.
    • Кэширует объекты, загруженные в рамках текущей сессии.
    • Объекты удаляются из кэша при закрытии сессии.
  2. Кэш второго уровня (Second-Level Cache):

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

    • Кэширует результаты запросов и параметры их выполнения.
    • Работает в связке с кэшем второго уровня, сохраняя идентификаторы объектов из результатов запросов.
    • Требует явного включения для каждого запроса.

Пример включения кэша второго уровня для сущности и запроса:

// Аннотация для Entity
@Entity
@Cacheable // Включение кэширования
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) // Стратегия управления кэшем
public class User {
    // ... поля сущности
}
// Включение кэша для запроса
Query query = session.createQuery("FROM User WHERE isActive = :active");
query.setParameter("active", true);
query.setCacheable(true); // Включение кэширования для запроса
List<User> activeUsers = query.list();

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

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