タグ

2012年5月4日のブックマーク (3件)

  • JPAによる一意性の保証(2) | かサハラノリオ |泳ぎ|漕ぎ|走り|ながら考える

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

    ykog
    ykog 2012/05/04
  • JPAによる一意性の保証(1) | かサハラノリオ |泳ぎ|漕ぎ|走り|ながら考える

    代替キーの一意性の保証 JPAを使用しているとき、エンティティの属性値の一意性を保証するのにはどうしたら良いのだろうか。 IDフィールド(@Id)を一意(ユニーク)に保つのは容易だ。同じID値で、エンティティを作成[EntityManager#persist()]しようとすれば、EntityExistsExceptionがスローされる。これをキャッチしてしかるべく処置すれば良いのだから。 問題は代替キーの方である。 DBMSの整合性制約の活用 永続フィールドに @Column(unique = true) を指定すれば、DBMSレベルで一意性を保証してくれる。しかし、これをJPAでハンドリングするのはやっかいだ。 一意性に違反したとき、つまり、同じ属性値を持ったエンティティを作成しようとしたときには、PersistenceExceptionがスローされる。これは、SQLExceptionと

    ykog
    ykog 2012/05/04
  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
    ykog
    ykog 2012/05/04