Spring MVC 3.0 кэширование - PullRequest
       7

Spring MVC 3.0 кэширование

0 голосов
/ 21 сентября 2010

Я использую spring mvc 3.0 с eclipselink и jpa, и у меня возникает следующая проблема: у меня есть это поле в моем приложении:

@OneToMany(mappedBy = "stadium")
private Set<FootballMatch> footballMatches = new HashSet<FootballMatch>();

когда инициируется какое-либо действие, которое добавляет новые элементы в набор с помощью Set.add(), изменения не отображаются в браузере, хотя в базе данных есть новые строки. Когда я очищаю кеш браузера, ничего не происходит. Я обнаружил, что способ принудительной загрузки новых значений - это повторное развертывание приложения, даже без изменения одной строки. Таким образом, приложение возвращает старые значения, где-то кеширует их. Как заставить его всегда загружать обновленные значения? Я думал о чем-то вроде getLastModified(), но я не знаю, где мне это реализовать.

1 Ответ

2 голосов
/ 21 сентября 2010

Поскольку это двунаправленное отношение, убедитесь, что вы устанавливаете обе стороны отношения.

См., http://en.wikibooks.org/wiki/Java_Persistence/Relationships#Object_corruption.2C_one_side_of_the_relationship_is_not_updated_after_updating_the_other_side

Также убедитесь, что вы меняете, объединяете и фиксируете правильные объекты..

Попробуйте использовать EntityManager.refresh () для обновления объекта. Получаете ли вы обновленные значения?Если вы этого не сделаете, то ваша база данных не имеет данных.

Кешируете ли вы EntityManager в своем приложении?Если у вас есть старый EntityManager, он не увидит новых изменений.Обычно новый EntityManager должен создаваться для каждого запроса / транзакции.

EclipseLink поддерживает кэш объектов по умолчанию, это можно отключить с помощью свойства persistence.xml, "eclipselink.caching.shared" = "false"

См. http://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching

...