中にデータベースから変更を取得することはできません。会話の開始時に呼び出される)SEAM /休止状態:私はクラス持って会話
@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();
}
}
メソッドの開始を(属性バーを初期化(バーいくつかのエンティティクラスです)。次に、barにはエンティティでもあるbazという属性があります。
会話中に、他のユーザーがバーに関連するbazオブジェクトを変更することがあります。次に、end()が呼び出されると、bar.getBaz()はの古い(変更されていない)バージョンのbazを返します。さらにはをデータベースに上書きします。
session.flush()、session.merge(bar)、session.merge(bar.getBaz())を使用してend()メソッドでbazの変更状態を取得しようとしましたが、何も機能しません。データベースの汚染を避けるにはどうすればいいですか?
ありがとうございます! session.refresh(bar.getBaz())が機能しました!アプリケーションはすでにプロダクション状態にあり、データベーススキーマは変更できないため、@ Versionを使用できませんでした。 – janek37