JavaアプリケーションにはHibernatewithSpringを使用しています。セッションがデータベース内の何かを更新すると、他のセッションは更新を見ることができないことがわかりました。たとえば、user1はデータベースからアカウントの残高を取得し、次にuser2は残高を増やします。user1が更新前にアカウントの残高をもう一度確認したときにオブジェクトを取得した場合(セッションはキャッシュからの値を使用しているようです)、更新されたオブジェクトを新しいもので取得したいとします。勘定残高。User1は、user2セッションとは異なるすべてのアクティビティ中に1つのセッションを使用します。データベースから更新されたオブジェクトを強制的に取得するための構成はありますか?または他の助け?
質問する
872 次
2 に答える
1
これは設計によるものです(Sessionを「作業単位」と考えてください)。セッションはトランザクション的に分離する必要があります。これは、セッションが短命である必要がある非常に多くの理由の1つです。あなたが長命のセッションを使用しているかもしれないように私には聞こえます。
ただし、いずれの場合も、を使用して「他のセッション」(この場合はuser1)にアカウントの状態を更新session.refresh( theAccount );
させることができます。アカウントを更新するときに依存状態も更新する必要がある場合は、REFRESHもカスケード可能なアクションです...
于 2012-06-30T14:26:23.040 に答える
0
すべてのアクティビティに単一のセッションを使用している場合、表示されているものが期待されます。
セッション1はオブジェクトをロードし、その後セッション2によって変更されます。ただし、セッション1はまだ開いており、オブジェクトはセッション(第1レベル)キャッシュにあります。を使用してSession1を更新できsession.clear()
ます。その後、オブジェクトをリロードすると、更新されたバージョンが取得されます。
于 2012-06-30T11:37:30.437 に答える