JPA 2.0 では、TYPE 演算子を使用して、クエリでポリモーフィック クエリから返されるクラスを制限できます。JPA 2.0 仕様から:
4.6.17.4 エンティティ型式
エンティティ タイプの式を使用して、クエリのポリモーフィズムを制限できます。TYPE 演算子は、引数の正確な型を返します。
エンティティ タイプ式の構文は次のとおりです。
entity_type_expression ::=
type_discriminator |
entity_type_literal |
input_parameter
type_discriminator ::=
TYPE(identification_variable |
single_valued_object_path_expression |
input_parameter )
entity_type_literalは、エンティティ名によって指定されます。
エンティティーの Java クラスは、エンティティー・タイプを指定するための入力パラメーターとして使用されます。
例:
SELECT e
FROM Employee e
WHERE TYPE(e) IN (Exempt, Contractor)
SELECT e
FROM Employee e
WHERE TYPE(e) IN (:empType1, :empType2)
SELECT e
FROM Employee e
WHERE TYPE(e) IN :empTypes
SELECT TYPE(e)
FROM Employee e
WHERE TYPE(e) <> Exempt
JPA 1.0 はそのようなメカニズムを提供しないため、JPA 1.0 を使用している場合、標準の JPQL を使用してこれを行うことはできません。
独自の HQL を使用してもかまわない場合は、特殊なプロパティを使用できますclass
。
同様に、特別なプロパティclass
は、ポリモーフィック永続性の場合にインスタンスの識別子の値にアクセスします。where 句に埋め込まれた Java クラス名は、その識別子の値に変換されます。
from Cat cat where cat.class = DomesticCat
あなたの場合、私はそのようなことを試してみます:
SELECT MAX(a.columnName) FROM A a where a.x.class = Y