Я уже понял, что есть много вопросов относительно кеширования и гибернации на SO, но я не смог найти решение своей проблемы. Большинство вопросов, где реферирование с использованием гибернации напрямую без использования JPA.
Мы используем Spring с Hibernate, настроенным в качестве поставщика JPA. Само приложение представляет собой веб-приложение, использующее JSF. Базовой базой данных является SQL Server 2008.
В соответствии со спецификацией JPA мы добавили следующее к persistence.xml
.
<shared-cache-mode>NONE</shared-cache-mode>
Hibernate, кажется, более или менее игнорирует его. Документация Hibernate сообщает, что это отключает кэш второго уровня. Однако нашему приложению требуются самые последние данные из базы данных, поскольку третье приложение будет изменять некоторые данные, которые теперь будут заканчиваться.
Как отключить кеширование? Мы получаем данные способом JPA с такими запросами, как:
@PersistenceContext(type=PersistenceContextType.EXTENDED)
private EntityManager em;
...
return em.createQuery("SELECT mt FROM " + MyTable.class.getSimpleName() + " mt",
MyTable.class).getResultList();
@ axtavt
Я запускаю приложение и загружаю в браузер страницу, которая запрашивает таблицу.
Я переключаюсь на свою СУБД и делаю обновление на столе.
Я открываю второй браузер, и он все еще показывает старые данные, а не обновленные.
Обновление
Я провел еще несколько тестов. Я использовал @PersistenceContext
с EXTENDED
. Я добавил это здесь. Если я уберу это, это работает, однако я сталкиваюсь с другими проблемами тогда ...