0

私はJavaサーブレットアプリケーション+休止状態+ストリーミングサーバーを持っています

フロー:

  1. ユーザー ログイン ビデオ ストリーミングを開始する
  2. データベース内の abonament 分を 2 秒ごとに減らします
  3. 分 < 0 の場合、新しい分のリクエストを送信します (応答は時間がかかる場合があります。その場合は、デクリメントを続けます)

問題:

データの一貫性の問題が表示されます。つまり、分の減少中に表示されます。例:user.setMinutes(user.getMinutes() - 2)新しい議事録応答によって行われた変更が表示されない場合があり、議事録が破損します。

新しい休止状態のトランザクションを作成し、議事録を変更するたびにそれをコミットすることが解決策になると思いましたが、これはうまくいきませんでした:

Transaction t = session.beginTransaction();
user.setMinutes()
session.flush();
t.commit();

質問:

各変更が最新のデータを取得するときに、この問題を解決するにはどうすればよいですか?

4

1 に答える 1

1

Hibernate セッションは、エンティティをメモリにキャッシュします (この場合はUserエンティティ)。残りの時間を変更するために新しいトランザクションを作成するだけでは十分ではありません。他のタスク (追加の時間リクエスト) によって行われた変更を再読み込みする必要もあります。これは、次のように呼び出すことで実現できますrefresh()

session.refresh(user);
user.setMinutes(user.getMinutes() - 2);
session.flush();
于 2012-06-10T09:40:29.547 に答える