У меня есть класс:
@Name("foo")
@Scope(ScopeType.CONVERSATION)
public class Foo {
@In
Session session;
@In
private Conversation conversation;
@RequestParameter
Long barId;
/* outjected fields */
@Out
Bar bar;
/* some attributes and methods */
public void start() {
/* some initializations */
this.bar = (Bar) session.get(Bar.class, barId);
}
public void end() {
/* some actions involving bar and bar.getBaz() */
conversation.end();
}
}
Метод start () вызывается в начале диалога и инициализирует панель атрибутов (Bar - это некоторый класс сущностей).Затем bar имеет атрибут baz, который также является сущностью.
Во время разговора может случиться, что другой пользователь изменяет объект baz, связанный с нашей панелью.Затем, когда вызывается end (), bar.getBaz () возвращает старую (неизмененную) версию baz и, более того, перезаписывает ее в базу данных.
Я пытался получить измененное состояние baz в методе end (), используя session.flush (), session.merge (bar), session.merge (bar.getBaz ()), но ничего не работает.Как я могу избежать загрязнения в базе данных?