EntityManager.lock(entity, LockModeType.READ) を呼び出すことの影響を理解しようとしています。API ドキュメントは、私にとって非常にわかりにくいように思えます。
同時スレッドが必要で、スレッド 1 が lock(entity, LockModeType.READ) を呼び出した場合、スレッド 2 は引き続きエンティティを読み書きできますか?
これまでに学んだこと:
JPA1 のロック・タイプ READ は、JPA2 の OPTIMISTIC と同じです。このようなロックが設定されている場合、EntityManager はトランザクションをコミットする前にバージョン属性をチェックしますが、更新はしません。OPTIMISTIC ロック モードの説明を見つけました: Link。OPTIMISTIC (READ) LockMode Example を検索します。私がこれを理解している限り、スレッド 1 で読み取りロックを設定しても、スレッド 2 ... n には影響しません。他のすべてのスレッドは、引き続きエンティティの読み取りと書き込みを行うことができます。ただし、スレッド 1 のトランザクションがコミットされ、別のスレッドがエンティティを更新すると、スレッド 1 のトランザクションはロールバックされます。
私はこれを正しく理解していますか?