JavaのDBプログラミングメモ

Dirty Reads Non-Repeatable Reads Phantom Reads
TRANSACTION_NONE 発生する 発生する 発生する
TRANSACTION_READ_UNCOMMITTED 発生する 発生する 発生する
TRANSACTION_READ_COMMITTED 発生しない 発生する 発生する
TRANSACTION_REPEATABLE_READ 発生しない 発生しない 発生する
TRANSACTION_SERIALIZABLE 発生しない 発生しない 発生しない
  • 悲観的ロック
    • SELECT FOR UPDATE文を使う。JPAではサポートされていない。またこれを使用できないDBMSもあるみたい。
  • 楽観的ロック
    • @Versionを使う。更新の衝突が起こるとjavax.persistence.OptimisticLockExceptionがthrowされる。

楽観的ロックが一般的らしい。[Seasar-user:10097] Re: [S2Dao] 行ロック(FOR UPDATE)について

トランザクション分離レベルはTRANSACTION_READ_COMMITTEDで楽観的ロックを使うケースが多いのかな。

うーん、しかしDB周りの知識が不足しているな。ボクハ。