2

JPA2.1でアプリケーションを開発しています。次のトラブルがあります。

この方法でエンティティをロックしようとしています:

Book book = em.find(Book.class, 12);
em.lock(book, LockModeType.PESSIMISTIC_WRITE);

しかし、別の Windows ブラウザまたはクライアントから id=12 のエンティティにアクセスしようとすると、システムは PessimisticLockException をスローしませんか?

どこが間違っていますか?

4

2 に答える 2

2

ロックはトランザクションの有効期間中は有効ですが、複数のリクエスト/レスポンス ループでは有効ではありません (長時間のトランザクションを管理するようにエンティティ マネージャーとトランザクション マネージャーを構成していない限り)。

トランザクションは短時間の生きたオブジェクトでなければなりません (パフォーマンス上の理由から)。

楽観的な書き込みロックとは、命令からトランザクションの終了までのbook間、他のスレッドによって変更されないことを意味します。lockしかし、book オブジェクト自体はもちろん、より長く存続する可能性があります。

于 2013-09-12T11:21:20.980 に答える