8.17.10 クエリ使用時に発生する例外
CJPAプロバイダの場合,クエリ関連のアノテーションで文法的に間違いがあると,アプリケーションをデプロイするとき例外が発生します。また,クエリ関連のメソッドの引数が不正であったり,指定された文字列が有効なJPQLの文字列でなかったりすると,IllegalArgumentException例外が発生するか,クエリの実行が失敗します。
ネイティブクエリを使用しているデータベースのクエリに対して有効でない場合,または定義された結果のセットがクエリの結果と互換性がない場合,クエリの実行は失敗します。CJPAプロバイダでは,クエリの実行時にPersistenceException例外がスローされます。
(1) EntityManager内のクエリ関連インタフェースのAPIで発生する例外
EntityManager内のクエリ関連インタフェースのAPIで発生する例外を次に示します。
-
createQueryメソッドのクエリ文字列が正しくない場合は,IllegalArgumentException例外がスローされます。
-
createNamedQueryメソッドに指定された名前でクエリが定義されていない場合は,IllegalArgumentException例外がスローされます。
(2) QueryインタフェースのAPIで発生する例外
QueryインタフェースのAPIで発生する例外を次に示します。
-
getResultListメソッドで,JPQLのUPDATE文またはDELETE文が呼び出された場合は,IllegalStateException例外がスローされます。
-
getSingleResultメソッドで,クエリ結果がない場合は,NoResultException例外がスローされます。なお,クエリ結果が二つ以上ある場合は,NonUniqueResultException例外がスローされます。JPQLのUPDATE文,またはDELETE文が呼び出された場合は,IllegalStateException例外がスローされます。
-
executeUpdateメソッドで,JPQLのSELECT文が呼び出された場合は,IllegalStateException例外がスローされます。このとき,トランザクションがない場合は,TransactionRequiredException例外がスローされます。
-
setHintメソッドの第2引数が実装に対して正しくない場合は,IllegalArgumentException例外がスローされます。
-
setParameterメソッドの引数の位置がクエリの位置パラメタと一致しない場合,または引数のパラメタ名がクエリ文字列のパラメタと一致しない場合は,IllegalArgumentException例外がスローされます。
-
setMaxResultsまたはsetFirstResultメソッドの引数が負数の場合は,IllegalArgumentException例外がスローされます。
なお,APIの詳細については,Javaのドキュメントを参照してください。