EntityManagerのcontains()メソッドはエンティティのインスタンスがカレントの永続化コンテキストで管理されているかを取得するために利用できます。
ここでは,contains()メソッドの戻り値の条件について説明します。
- contains()メソッドがtrueを返す条件
- エンティティがデータベースから取得されていて,EntityManagerから削除されていない場合,または切り離されていない場合
- エンティティのインスタンスが生成され,persistメソッドがそのエンティティに対して実行されている場合,またはpersist操作がそのエンティティに伝播されている場合
- contains()メソッドがfalseを返す条件
- エンティティのインスタンスが切り離されている場合
- removeメソッドがエンティティに対して実行されている場合,またはremove操作がエンティティに伝播されている場合
- エンティティのインスタンスが生成され,persistメソッドがそのエンティティに対して実行されていない場合,またはpersist操作がそのエンティティに伝播されていない場合
実際のデータベースでのinsertおよびdelete処理がトランザクションの決着まで遅延されます。これに対して,persistやremoveの伝播はcontainsメソッドではすぐに反映されることに注意してください。
なお,エンティティのインスタンスが単一の永続化コンテキストでだけ管理されていることは,アプリケーション側で保証してください。Cosminexus JPAプロバイダでは,同じJavaのインスタンスを複数の永続化コンテキストで管理した場合の動作は保証しません。