JPA (Hibernate) Fetch Join で問題が発生しています:
ここに私のJPQLクエリがあります
SELECT n FROM News n LEFT JOIN FETCH n.profiles AS pr WHERE pr.id=?1
しかし、それは機能していません。フェッチされているリストをフィルタリングするクエリを作成するにはどうすればよいですか?
仕様によると、あなたがやろうとしていることは許可されていません(少なくともJPAでは許可されていません)。JPA 1.0仕様から:
4.4.5.3フェッチ結合
FETCH JOINを使用すると、クエリ実行の副作用として関連付けをフェッチできます。FETCH JOINは、エンティティとその関連エンティティに対して指定されます。
フェッチ結合の構文は次のとおりです。
fetch_join ::= [ LEFT [OUTER] | INNER ] JOIN FETCH join_association_path_expressionFETCH JOIN句の右側で参照される関連付けは、クエリの結果として返されるエンティティに属する関連付けである必要があります。FETCH JOIN句の右側で参照されるエンティティの識別変数を指定することは許可されていないため、暗黙的にフェッチされたエンティティへの参照をクエリの他の場所に表示することはできません。
したがって、以下が機能するはずです。
SELECT n FROM News n LEFT JOIN n.profiles p WHERE p.id = ?1
ただし、ここではFETCHJOINを使用できません。
この方法を試してください:
SELECT n FROM News n LEFT JOIN FETCH n.profiles AS pr WITH (pr.id=?1)