Добрый день.
Возникла такая неприятность:
Необходимо выбросить из кеша обьект, к которому через hibernate идут только select'ы,
а изменяется он в базе через триггер.
Я нашел вариант — отключить кеш второго уровня, но этого в моей ситуации делать никак нельзя.
Вопрос: Как заставить Hibernate обновить обьект или удалить его из кеша?
Пробовал через evict, не помогает.
public T evict(T entity) {
Session session = PersistUtils.openSession();
try {
session.evict(entity);
} finally {
PersistUtils.closeSession(session);
}
return entity;
}
Здравствуйте, Semper, Вы писали:
S>Добрый день.
S>Возникла такая неприятность:
S>Необходимо выбросить из кеша обьект, к которому через hibernate идут только select'ы,
S>а изменяется он в базе через триггер.
S>Я нашел вариант — отключить кеш второго уровня, но этого в моей ситуации делать никак нельзя.
вообще нельзя, или даже для этой сущности нельзя? а sess.refresh() не поможет?
S>Необходимо выбросить из кеша обьект, к которому через hibernate идут только select'ы,
S>а изменяется он в базе через триггер.
S>Я нашел вариант — отключить кеш второго уровня, но этого в моей ситуации делать никак нельзя.
Как вариант — не кешировать класс, который представляет таблицу, обновляемую через триггер.
Убрать строку, включающую кеш для данного класса. Например такую:
<cache usage="read-only"/>
А еще можно управлять доступом к кешу в текущей сессии:
session.setCacheMode(CacheMode.IGNORE)
Тогда сессия не будет обращаться к second-level кешу, а вычитает данные из базы.