Hibernate - выбросить кешированный обьект
От: Semper Украина  
Дата: 10.04.08 12:47
Оценка:
Добрый день.

Возникла такая неприятность:
Необходимо выбросить из кеша обьект, к которому через hibernate идут только select'ы,
а изменяется он в базе через триггер.
Я нашел вариант — отключить кеш второго уровня, но этого в моей ситуации делать никак нельзя.

Вопрос: Как заставить Hibernate обновить обьект или удалить его из кеша?

Пробовал через evict, не помогает.

public T evict(T entity) {
Session session = PersistUtils.openSession();
try {
session.evict(entity);
} finally {
PersistUtils.closeSession(session);
}
return entity;
}
Re: Hibernate - выбросить кешированный обьект
От: Lucker Беларусь http://lucker.intervelopers.com/
Дата: 10.04.08 12:59
Оценка:
Здравствуйте, Semper, Вы писали:

S>Добрый день.


S>Возникла такая неприятность:

S>Необходимо выбросить из кеша обьект, к которому через hibernate идут только select'ы,
S>а изменяется он в базе через триггер.
S>Я нашел вариант — отключить кеш второго уровня, но этого в моей ситуации делать никак нельзя.

вообще нельзя, или даже для этой сущности нельзя? а sess.refresh() не поможет?
Blog
Re: Hibernate - выбросить кешированный обьект
От: Sergey Astakhov Россия  
Дата: 10.04.08 16:07
Оценка:
Здравствуйте, Semper, Вы писали:

S>Вопрос: Как заставить Hibernate обновить обьект или удалить его из кеша?


S>Пробовал через evict, не помогает.


Смотри методы SessionFactory.evict() — это как раз для кэша второго уровня.
Re: Hibernate - выбросить кешированный обьект
От: leha2000 Украина  
Дата: 11.04.08 16:55
Оценка:
S>Необходимо выбросить из кеша обьект, к которому через hibernate идут только select'ы,
S>а изменяется он в базе через триггер.
S>Я нашел вариант — отключить кеш второго уровня, но этого в моей ситуации делать никак нельзя.

Как вариант — не кешировать класс, который представляет таблицу, обновляемую через триггер.
Убрать строку, включающую кеш для данного класса. Например такую:
<cache usage="read-only"/>


А еще можно управлять доступом к кешу в текущей сессии:
    session.setCacheMode(CacheMode.IGNORE)

Тогда сессия не будет обращаться к second-level кешу, а вычитает данные из базы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.