4

全て。

私は純粋な JPA を使用してプログラムを作成していました。そのプロバイダーは休止状態であり、基盤となるデータベースは Azure SQL DB でした。このプログラムは分散環境で実行され、その多くのコピーが異なるサーバーで実行されます。

そのような手順を実行する必要があります (ex-):
1、指定された学生エンティティをロックし、
2、クラス エンティティのステータスを確認し、ステータスが 1 の場合は続行し、それ以外の場合は、このクラス エンティティをロックして、取得するまで試行しますこのクラスのロック
3, ステータスのステータスを確認 (分散環境のため、別のサーバーからの別のスレッドによって変更されている可能性があります), それでも 1 でない場合は、何かを実行し、ステータスを 1 に変更します,
4, このクラス エンティティのロックを解除します
5、他のことをします(現在の学生エンティティを引き続きロックします)

次のコード セグメントでロックを取得します。

    Map<String,Object> map = new HashMap<String, Object>();
    map.put("javax.persistence.lock.timeout", 0);
    return this.getEntityManager().find( cls, id,  LockModeType.PESSIMISTIC_WRITE,map);

しかし、ステップ4でロックを解放する方法がわかりません。エンティティのロックを解放し、他のロックのままにする方法はありますか?

どうもありがとう、アドバイスは適切に処理されます。

4

1 に答える 1

5

ロックモードをなしに設定する必要があります

  em.lock(myEntity, LockModeType.NONE);

http://www.objectdb.com/java/jpa/persistence/lockを参照してください。

于 2013-06-07T08:33:02.940 に答える