8.14.3 EntityManagerのAPIに関する注意事項
EntityManagerが提供するAPIについての注意事項を次に示します。なお,EntityManagerのAPIについては「8.22 javax.persistenceパッケージに含まれるアノテーションのサポート範囲」を参照してください。
-
トランザクションスコープ永続化コンテキストのEntityManagerが使用されるとき,persist,merge,remove,refreshメソッドは,トランザクションコンテキスト内で実行する必要があります。トランザクションコンテキストがない場合は,javax.persistence.TransactionRequiredExceptionがスローされます。
-
findメソッドとgetReferenceメソッドは,トランザクションコンテキストでの実行を要求しません。このため,トランザクションスコープ永続化コンテキストのEntityManagerが使用された場合,結果のエンティティはdetached状態になります。また,拡張された永続化コンテキストのEntityManagerが使用された場合,結果のエンティティはmanaged状態になります。
-
createQueryメソッドの引数が有効なJPQLの文字列でなければ,IllegalArgument例外を送出し,クエリの実行が失敗します。
-
実行するネイティブクエリが,接続先のデータベースの仕様に合わない場合,または定義された結果のセットがクエリの結果と互換性がない場合,クエリの実行は失敗し,クエリの実行時にPersistenceExceptoin例外がスローされます。
-
EntityManagerインタフェースのメソッドからランタイム例外が送出されると,カレントのトランザクションはロールバックにマークされます。
-
EntityManagerから取得したQueryオブジェクト,およびEntityTransactionオブジェクトは,EntityManagerがオープンしている間は有効です。