У меня есть владелец (категория) и клиент (Форум) лица разработаны таким образом:JPA - Как обновить коллекцию в би-directionnal OneToMany/ManyToOne отношениях
Категории
...
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "category")
@OrderBy("position")
private List<Forum> forums;
...
Форум
...
@ManyToOne
@JoinColumn(name = "category")
private Category category;
private Integer position;
...
Где-то в моем веб-приложение, я отображения списка форумов, а я исполняю некоторые беспл на одном из них, например, изменить свое положение.
Моя проблема заключается в том, что изменение хорошо сохранилось в базе данных, но есть , не отраженное в коллекции OneToMany, сопоставленной. Таким образом, когда я обновляю страницу, отображающую список, она не отображает новую позицию, кроме предыдущей.
Код, который я использую для обновления позиции элемента, эквивалентен простому em.merge(forum)
. Я читал по многим темам, что я должен «вручную управлять» двунаправленными отношениями, иначе я столкнулся бы с такими проблемами. Вот мои два вопроса:
- я пытался как на EclipseLink и Hibernate, и в то время как он хорошо работает с Hibernate (список обновляется), он doens't в EclipseLink. Связано ли это с некоторыми различиями в режиме кэширования?
- Как я должен вручную заметить мой список, что одно из свойств его элемента изменилось (например, свойство позиции форума в списке форумов)?
[EDIT] Я читал this topic, и я чувствую, что моя проблема связана с моим форумом обновляется с помощью другого сеанса от одного используется для извлечения списка. Правильно ли я это понимаю? Если да, то как правильно управлять этим делом?
Я предполагаю, что вы установите оба конца при создании объектов? – membersound