10.4.12. HQL 述語について

述語は where 節、having 節、および検索 case 式の基盤を形成します。これらは式で、通常は TRUE または FALSE の真理値で解決しますが、NULL が関係するブール値の比較は UNKNOWN で解決します。

HQL 述語

NULL 述語
NULL の値をチェックします。基本的な属性参照、エンティティー参照、およびパラメーターへ適用できます。HQL はコンポーネント/埋め込み可能タイプへの適用も許可します。

例10.11 NULL チェックの例

// select everyone with an associated address
select p
from Person p
where p.address is not null

// select everyone without an associated address
select p
from Person p
where p.address is null
LIKE 述語
文字列値で LIKE 比較を実行します。構文は次の通りです。
like_expression ::=
   string_expression
   [NOT] LIKE pattern_value
   [ESCAPE escape_character]
セマンティックは SQL の LIKE 式に従います。pattern_value は、string_expression で一致を試みるパターンです。SQL と同様に、pattern_value に「_」や「%」をワイルドカードとして使用できます。意味も同じで、「_」はあらゆる 1 つの文字と一致し、「%」はあらゆる数の文字と一致します。
任意の escape_character は、pattern_value の「_」や「%」をエスケープするために使用するエスケープ文字を指定するために使用されます。「_」や「%」が含まれるパターンを検索する必要がある場合に役立ちます。

例10.12 LIKE 述語の例

select p
from Person p
where p.name like '%Schmidt'

select p
from Person p
where p.name not like 'Jingleheimmer%'

// find any with name starting with "sp_"
select sp
from StoredProcedureMetadata sp
where sp.name like 'sp|_%' escape '|'
BETWEEN 述語
SQL の BETWEEN 式と同様です。値が他の 2 つの値の間にあることを評価するため実行します。演算対象はすべて比較可能な型を持つ必要があります。

例10.13 BETWEEN 述語の例

select p
from Customer c
    join c.paymentHistory p
where c.id = 123
  and index(p) between 0 and 9

select c
from Customer c
where c.president.dateOfBirth
        between {d '1945-01-01'}
            and {d '1965-01-01'}

select o
from Order o
where o.total between 500 and 5000

select p
from Person p
where p.name between 'A' and 'E'