我有一堂课:
@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 是某个实体类)。然后, bar 有一个属性 baz ,它也是一个实体。
在对话期间,可能会发生其他一些用户修改与我们的 bar 相关的 baz 对象。然后,当 end() 被调用时,bar.getBaz() 返回旧的(未修改的)baz 版本,而且,将它覆盖到数据库中。
我尝试使用 session.flush()、session.merge(bar)、session.merge(bar.getBaz()) 在 end() 方法中获取 baz 的修改状态,但没有任何效果。如何避免数据库中的污染?