Вопрос

Я использую Spring MVC 3.0 с EclipseLink и JPA, и я испытываю следующую проблему: у меня есть это поле в моем приложении:

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

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

Это было полезно?

Решение

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

Видеть,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 поддерживает кэш объекта по умолчанию, это может быть отключено с использованием свойства Sististence.xml, «Eclipselink.caching.shared» = «False»

Видеть,http://wiki.eclipse.org/eclipselink/example/jpa/caching.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top