14.9. where 節

where 節は返されるインスタンスのリストを絞ることができます。もし別名がない場合、名前でプロパティを参照することができます。
from Cat where name='Fritz'
別名がある場合、修飾名を使ってください:
from Cat as cat where cat.name='Fritz'
名前が 'Fritz' という Cat のインスタンスを返します。
以下のクエリ:
select foo
from Foo foo, Bar bar
where foo.startDate = bar.date
FoostartDate プロパティと等しい date プロパティを持った bar インスタンスが存在する、すべての Foo インスタンスを返します。複合パスの表現は where 節を非常に強力にします。以下を考えてみましょう:
from Cat cat where cat.mate.name is not null
このクエリはテーブル(内部)結合を持つ SQL クエリに変換されます。例:
from Foo foo
where foo.bar.baz.customer.address.city is not null
上のクエリを記述したらクエリ内に4つのテーブル結合を必要とする SQL に変換されます。
= 演算子は以下のように、プロパティだけでなくインスタンスを比較するためにも使われます:
from Cat cat, Cat rival where cat.mate = rival.mate
select cat, mate
from Cat cat, Cat mate
where cat.mate = mate
id (小文字) は特別なプロパティであり、オブジェクトの一意の識別子を参照するために使用できます。詳細については 「識別子プロパティの参照」 を参照ください。
from Cat as cat where cat.id = 123

from Cat as cat where cat.mate.id = 69
2番目のクエリは効率的で、テーブル結合が必要ありません。
また複合識別子のプロパティも使用できます。ここで PersoncountrymedicareNumber からなる複合識別子を持つと仮定します。
from bank.Person person
where person.id.country = 'AU'
    and person.id.medicareNumber = 123456
from bank.Account account
where account.owner.id.country = 'AU'
    and account.owner.id.medicareNumber = 123456
繰り返しますが、2番目のクエリにはテーブル結合が必要ありません.
識別子のプロパティ参照に関するさらなる情報については、「識別子プロパティの参照」 を参照してください。
class は特別なプロパティであり、ポリモーフィックな永続化におけるインスタンスの 弁別子値にアクセスします。where 節に埋め込まれた Java のクラス名はその弁別子値に変換されます。
from Cat cat where cat.class = DomesticCat
またコンポーネントや複合ユーザー型、又はそのコンポーネントのプロパティも使用できます。詳細については、「コンポーネント」 を参照下さい。
"any" 型は特別なプロパティである idclass を持ち、以下の方法で結合を表現することを可能にします (AuditLog.item<any> でマッピングされたプロパティの場合)。
from AuditLog log, Payment payment
where log.item.class = 'Payment' and log.item.id = payment.id
log.item.classpayment.class が上記のクエリで全く異なるデータベースカラムの値を参照します。