Я работаю с JPA (1.0 или 2.) + hibernate (3.4.0 или 3.6.0), и у меня возникла проблема с кешированием. Что я делаю:
- Найти объект с моим классом JPA (строка в базе данных с определенным идентификатором)
- обновить логический флаг на объекте (поле tinyint в базе данных)
- сохранить объект
- получить всю таблицу из базы данных с помощью getResultList () в надежде отразить изменение.
Проблема:
Изменение отражается в getResultList при первом его вызове, но при втором отображении предыдущего состояния. Третий раз показывает правильно; четвертое, предыдущее состояние; и т. д. Кажется, что они чередуются между двумя состояниями каждый раз, когда я вызываю getResultList для таблицы.
Код для № 3 выше:
EntityTransaction entityTransaction = entityManager.getTransaction();
entityTransaction.begin();
entityManager.persist(object);
entityTransaction.commit();
entityManager.refresh(object);
Код для № 4:
Query query = entityManager.createQuery("from " + object.getName());
List<T> resultList = query.getResultList();
В моих усилиях по решению проблемы у меня есть:
1. Отключил L2 и кеш запросов в файле persistence.xml с:
<property name="hibernate.cache.use_query_cache" value="false"/>
<property name="hibernate.cache.use_second_level_cache" value="false"/>
2. принудительно вытеснил кеш перед запуском getResultList () с помощью (используя JPA 2.0):
entityManager.getEntityManagerFactory().getCache().evictAll()
3.пробовал вызвать refresh () повсюду - безрезультатно.
Я что-то упустил?
Буду признателен за любую помощь.
Спасибо,
подачка