「Select...for update」は、Hibernateで LockMode.UPGRADE これは、たとえば、 NamedQuery 。
ただし、アプリケーション/手動のテーブル行ロックを使用すると、いくつかの欠点があり(特に、データベース接続がトランザクションの途中で切断された場合)、更新手順ではそれがなくても実行できます。
- トランザクションを開始します。
- update table set state ='PENDING'、server_id =1 where state ='IN PROGRESS';
- トランザクションをコミットする
- state='PENDING'およびserver_id=1であるテーブルから選択します;
- [プロセスレコード]
これが機能するには、各サーバーに一意の番号が必要ですが、エラーが発生しにくくなり、DBMSに、分離( ACID 。