Фильтр JPA Fetch Join в списке / наборе - PullRequest
2 голосов
/ 27 августа 2010

У меня проблема с JPA (Hibernate) Fetch Регистрация:

Вот мой JPQL-запрос

SELECT n FROM News n LEFT JOIN FETCH n.profiles AS pr WHERE pr.id=?1

Но это не работает. Как я могу сделать запрос, который фильтрует список, который выбирается?

Ответы [ 2 ]

8 голосов
/ 28 августа 2010

Согласно спецификации, то, что вы пытаетесь сделать, не разрешено (по крайней мере, JPA).Из спецификации JPA 1.0:

4.4.5.3 Fetch Joins

FETCH JOIN позволяет извлекать ассоциацию как побочный эффект выполнения запроса.FETCH JOIN указывается для сущности и связанных с ней сущностей.

Синтаксис для выборочного соединения:

fetch_join ::= [ LEFT [OUTER] | INNER ] JOIN FETCH join_association_path_expression

Ассоциация, на которую ссылается правая часть предложения FETCH JOIN, должна бытьассоциация, которая принадлежит сущности, которая возвращается в результате запроса. Не разрешается указывать переменную идентификации для сущностей, на которые ссылается правая часть предложения FETCH JOIN, и, следовательно, ссылки на неявно извлекаемые сущности не могут появляться в других местах запроса.

Таким образом, должно работать следующее:

SELECT n FROM News n LEFT JOIN n.profiles p WHERE p.id = ?1

Но вы не можете использовать FETCH JOIN здесь.

0 голосов
/ 01 ноября 2012

Попробуйте так:

SELECT n FROM News n LEFT JOIN FETCH n.profiles AS pr WITH (pr.id=?1) 
...