Мне трудно понять, когда спящий режим попадает во второй уровень кеша, а когда он делает недействительным кеш.
Вот что я сейчас понимаю:
- Кэш второго уровня хранит объекты между сеансами, область действия - SessionFactory
- Вы должны указать, какие объекты кэшировать, по умолчанию никакие объекты не будут кэшироваться.
- Кэш запросов хранит результаты запросов в кеше.
Я не понимаю
- Когда спящий режим попадает в этот кеш?
- Допустим, я установил кеш второго уровня, но не кеширование запросов. Я хочу кэшировать своих клиентов, их 50000. Как я могу получить клиентов из кеша?
- Я предполагаю, что могу получить их по идентификатору из кеша. Это было бы легко, но кешировать не стоит. Но что, если я хочу произвести какие-то расчеты со всеми своими клиентами. Допустим, я хочу показать список клиентов, тогда как мне получить к ним доступ?
- Как мне получить всех своих клиентов, если кеширование запросов отключено?
- Что будет, если кто-то обновит одного из клиентов?
- Будет ли этот клиент признан недействительным в кеше или все клиенты станут недействительными?
Или я считаю кеширование совершенно неправильным? Что было бы более подходящим использованием кеша второго уровня в этом случае? В документации по гибернации вообще не понятно, как кеш работает на самом деле. Есть только инструкции по его настройке.
Обновление: Итак, я понял, что кеш второго уровня (без кеша запросов) был бы хорош для загрузки данных по идентификатору. Например, у меня есть пользовательский объект, разрешения на который я хочу проверять в каждом запросе в веб-приложении. Будет ли это хорошим случаем для уменьшения доступа к базе данных путем кэширования пользователя в кеш второго уровня? Как будто я сохраняю идентификатор пользователя в сеансе или где угодно, и когда мне нужно проверить разрешения, я загружал пользователя по его идентификатору и проверял разрешения.