Как получить запрос jpql из запроса sql?

Я могу сделать простой запрос SQL в JPQL, как это и его работа хорошо:

Query query = em.createQuery("SELECT p2 FROM Zp01 p2 where p2.gestionnaire IN (SELECT d.libelle FROM Affaire d)") ;
liszp01general= (List<Zp01>) query.getResultList();

но я не могу перевести этот запрос в JPQL, который уже работает в SQL:

SELECT p2.* from zp01 p2 join (SELECT TYPEC,count(TYPEC) as cnt_typec FROM planning_cuisson group by TYPEC HAVING COUNT(TYPEC) > 0) p1 where p2.type_cuisson=p1.typec order by cnt_typec asc ;

я попробовал это, но не сработало:

Query query = em.createQuery("SELECT p2 FROM Zp01 p2 join ( select G.TYPEC,count(G.TYPEC) as cnt_typec from PlanningCuisson G group by G.TYPEC HAVING COUNT(G.TYPEC) > 0) p1 Where p2.typeCuisson=p1.typec and p2.ordre NOT IN (SELECT k.numof FROM OfSemiplanifie k) AND p2.gestionnaire IN (SELECT d.libelle FROM Affaire d) order by cnt_typec asc");
      liszp01general= (List<Zp01>) query.getResultList();

1 ответ

Это старый пост, но в случае, если он кому-то поможет, я просто добавлю, что текущая версия JPQL не поддерживает подзапросы в FROM пункт. Из справочника JPQL:

Подзапросы ограничены пунктами WHERE и HAVING в этом выпуске. Поддержка подзапросов в предложении FROM будет рассмотрена в более позднем выпуске спецификации.

Когда мне нужно было сделать что-то подобное в проекте, мне пришлось переместить агрегатный подзапрос вниз в предложение where, добавить Comparator в сущность, а затем выполнить Collections.sort после вызова JPQL. Таким образом, запрос станет чем-то вроде:

...
WHERE p2.typeCuisson IN (SELECT G.TYPEC 
FROM PlanningCuisson G 
GROUP BY G.TYPEC 
HAVING COUNT(G.TYPEC) > 0)...

С коллекциями. Сортировать после query.getResultList()

Другие вопросы по тегам