EJB 3.0(Public Draft)入門記 Java Persistence API Chapter3 その6

今回は管理されたインスタンストランザクションロールバックについて。コードのサンプルはもうちょっと進んでから書いてみたいと思います。

3.2.5 Managed Instances

EntityManagerのcontains()メソッドはエンティティのインスタンスが現在の永続コンテキスト内で管理されているかどうかを判別するためにつかわれるそうです。

  • contains()メソッドがtrueを返すとき
    • エンティティがDBから取得され、削除されていないもしくは切り離されていない場合
    • インスタンスが生成され、persistメソッドがそのエンティティに対して実行されているもしくはpersist操作がそのエンティティにカスケードされている場合
  • contains()メソッドがfalseを返すとき
    • インスタンスが切り離されている場合
    • removeメソッドがエンティティに対して実行されているもしくはremove操作がそのエンティティにカスケードされている場合
    • インスタンスが生成され、persistメソッドがそのエンティティに対して実行されていない、また、persist操作がそのエンティティにカスケードされていない場合

実際のDBへの更新はトランザクション終了時まで行われないことがあるけれど、persitやremove操作がカスケードされるとcontains()メソッドはただちに感知するから注意しろと。

この節はひさしぶりにわかりやすい内容です。

3.2.6 Transaction Rollback

Transaction rollback causes a pre-existing managed instance or removed instance to become detached.

トランザクションロールバックが起こると事前に管理されたインスタンスもしくは削除されたインスタンスは切り離されるそうです。

なんでandじゃなくてorなんだろう?