[play1-jpa]ロックの種類

  playframework1

playframework1.2.7の時点で、同梱されているJPAのバージョンは2.0。について調べたメモ。(現在play1.5.3ではJPA2.2をサポートしているみたい)

  • OPTIMISTIC
  • OPTIMISTIC_FORCE_INCREMENT
  • PESSIMISTIC_READ
  • PESSIMISTIC_WRITE
  • PESSIMISTIC_FORCE_INCREMENT

OPTIMISTICは楽観ロック、PRESSIMISTICは悲観ロックを意味する。

楽観ロックはJPA1.0で対応していたロック(READ/WRITE)に対応するもの。
@Versionを使用したバージョン更新を行うエンティティ専用。

種類説明
OPTIMISTIC更新のコミット時のみ、対象データをロックし、バージョン更新をする。
OPTIMISTIC_FORCE_INCREMENT更新時だけでなく参照しただけでも、対象データをロックし、バージョン更新をする。
PESSIMISTIC_READエンティティを参照した時点で、対象データがロックされる。コミット時に解放される。
PESSIMISTIC_WRITEエンティティを更新した時点で、対象データがロックされる。
データ参照だけではロックされないので、参照→更新の間に他者に割り込まれる可能性がある。
ロックはコミット時に解放される。
PESSIMISTIC_FORCE_INCREMENT@Versionのバージョン管理が前提。
更新時だけでなく参照しただけでも、対象データをロックし、バージョン更新をする。
コミット時に解放される。
ロックの種類

悲観ロックは、@Versionのバージョン管理が無くても使用できる。(一部不可)

SELECT FOR UPDATEでロックしつつデータ取得、更新して、コミット。という流れを実現するのであれば、PESSIMISTIC_READが相当する。

LEAVE A COMMENT