6.4.4 データベースからのエンティティの取得

EntityManagerのfindメソッドまたはgetReferenceメソッドの呼び出しによって,引数で指定した主キーに対応するエンティティをデータベースから取得できます。

EntityManagerのfindメソッドまたはgetReferenceメソッドで返されるエンティティは,トランザクションスコープの永続化コンテキストを利用します。このため,トランザクション内でメソッドを呼び出した場合はmanaged状態になります。また,トランザクション外でfindメソッドまたはgetReferenceメソッドを呼び出した場合はdetached状態になります。

find操作またはgetReference操作で取得したエンティティの状態を次の表に示します。

表6-10 find操作またはgetReference操作で取得したエンティティの状態

永続化コンテキスト取得したエンティティの状態
トランザクションスコープの永続化コンテキスト(トランザクション外)detached
トランザクションスコープの永続化コンテキスト(トランザクション内)managed
拡張された永続化コンテキスト(トランザクション外)managed
拡張された永続化コンテキスト(トランザクション内)managed

なお,Cosminexus JPAプロバイダの場合,find操作またはgetReference操作では次の点がJPA仕様と異なります。なお,このほかにJPA仕様との機能差はありません。