6.5.2 JPQLの注意事項
JPQLを使用する場合の注意事項を次に示します。
-
位置パラメタおよび名前パラメタを指定できないJPQLの関数
次に示すJPQLの関数には,位置パラメタおよび名前パラメタを指定できません。指定した場合の動作は保証しません。これらの関数の機能を使用したい場合は,ネイティブSQLを使用してください。
-
ABS
-
CONCAT
-
IS [NOT] NULL
-
LENGTH
-
LOCATE
-
LOWER
-
MOD
-
SQRT
-
SUBSTRING
-
TRIM
-
UPPER
動作を保証しない例を次に示します。
(例) Query query1 = em.createQuery( "SELECT o FROM TestEntity o "+ "WHERE o.name=TRIM(LEADING FROM ?1)") .setParameter(1, " HitachiTaro");
-
-
null値の指定
WHERE句またはHAVING句に位置パラメタや名前パラメタを使用する場合,値にnullを指定できません。指定した場合の動作は保証しません。
動作を保証しない例を次に示します。
(例) int no_A=2; int no_B=4; Query query2 = em.createQuery( "SELECT o FROM TestEntity o WHERE o.id = ?1 + ?2") .setParameter(1, no_A) .setParameter(2, no_B);
-
?パラメタの指定
四則演算子(+,−,*,/)の両側に,?パラメタは指定できません。また,比較演算子(=,>,>=,<,<=,< >)の両側に?パラメタを指定すること,片側に?パラメタを指定してもう一方にリテラルを指定することはできません。指定した場合の動作は保証しません。JPQLの中で四則演算や比較演算をしないで,四則演算や比較演算の操作をしてからJPQLを使用してください。
動作を保証しない例を次に示します。
(例) int cmp_no=3; Query query3 = em.createQuery( "SELECT o FROM TestEntity o WHERE o.id = ?1 AND ?1 < 9") .setParameter(1, cmp_no);