15.18. 行値コンストラクタ構文
基盤のデータベースが ANSI SQL
row value constructor 構文 (tuple 構文とよばれることもあります) をサポートしていないとしても、HQL はその使用をサポートしています。ここでは、一般的にコンポーネントと連繋するマルチバリュー比較を指します。名前コンポーネントを定義する Person エンティティを考えましょう:
from Person p where p.name.first='John' and p.name.last='Jingleheimer-Schmidt'
from Person p where p.name.first='John' and p.name.last='Jingleheimer-Schmidt'
それは少々詳細になりますが、有効な構文です。
row value constructor 構文を使用することで、この構文を簡潔化できます:
from Person p where p.name=('John', 'Jingleheimer-Schmidt')
from Person p where p.name=('John', 'Jingleheimer-Schmidt')
それを
select 節で指定するのも効果的です。
select p.name from Person p
select p.name from Person p
複数の値と比較する必要のあるサブクエリを利用する場合、
row value constructor 構文の使用も利点がある場合があります。
from Cat as cat
where not ( cat.name, cat.color ) in (
select cat.name, cat.color from DomesticCat cat
)
from Cat as cat
where not ( cat.name, cat.color ) in (
select cat.name, cat.color from DomesticCat cat
)
この構文を使用するかを決定するときに考慮しなければならないことは、クエリがメタデータ内のコンポーネントのサブプロパティの順番に依存していることです。