Первый вопрос: почему вы хотите удалить пользователя из кеша запросов, когда он выходит из системы?Я не могу представить, почему ваша архитектура требует этого.Кэширование должно быть прозрачным, и EhCache может легко удалить пользователя, когда он больше не нужен или не помещается в кэш.
, если пользователь обновляется, Querycache станет неправильным для этого пользователя
Нет, не будет, по крайней мере, если обновление происходит через Hibernate.Вы знаете, как работает кеш запросов?В вашем случае он хранит email -> user id mapping.При запросе по email Hibernate сначала находит идентификатор пользователя , связанный с этим электронным письмом, а затем ищет пользователя по идентификатору.Если он существует в кеше 2-го уровня, он загружается оттуда.В противном случае Hibernate прозрачно загружает пользователя по id.Это все же лучше, чем запрашивать по электронной почте.
Если вы обновите пользователя, то Hibernate автоматически обновит / удалит кэш L2 и обновит кэш запросов для всех запросов, связанных с пользователями.Это просто работает.
Я хочу, чтобы оно обновлялось при обновлении пользователя
Что вы имеете в виду?Единственные устаревшие данные, с которыми вы столкнетесь, - это пользовательские экземпляры, хранящиеся в кеше L1, L2 и кеш запросов обновляются без проблем.
См. Также: Кеширование с помощью Hibernate + Spring - некоторые вопросы!