前回に続いて、JPAでエンティティの属性値の一意性を保証する方式を考察する。 エンティティのIDフィールドではなく、それ以外の一意性を持ったフィールドをユニークに保つ方法である。 まずは、厳密な制御が必要かどうか再考 前回書いたように、 既存エンティティで同一値を持ったものがないか調べる 同一値を持ったエンティティが存在しなければ新規に登録 という手順を行うと、厳密な排他制御がない場合は、1と2の間に他のセッションから同一値のエンティティが登録されてしまうかもしれない。主要のRDBMSのトランザクション分離レベル=直列化可能(Serializable)の実装が不完全な現実がある以上、テーブルロックなどの手法を用いて、他から登録されるのを防がなければならない。 ところで、検索⇒登録(挿入)⇒コミットは、数ミリ秒程度で終わると思うが、このわずかな時間に同一値のデータが登録されてしまうという可