Mysql 如何从sql查询中获取jpql查询?

Mysql 如何从sql查询中获取jpql查询?,mysql,sql,jpa,jpql,Mysql,Sql,Jpa,Jpql,我可以像这样在JPQL中进行sql简单查询,并且它工作得很好: Query query = em.createQuery("SELECT p2 FROM Zp01 p2 where p2.gestionnaire IN (SELECT d.libelle FROM Affaire d)") ; liszp01general= (List<Zp01>) query.getResultList(); 我试过了,但没有成功: Query query = em.createQuery("S

我可以像这样在JPQL中进行sql简单查询,并且它工作得很好:

Query query = em.createQuery("SELECT p2 FROM Zp01 p2 where p2.gestionnaire IN (SELECT d.libelle FROM Affaire d)") ;
liszp01general= (List<Zp01>) query.getResultList();
我试过了,但没有成功:

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();

这是一篇较旧的文章,但为了帮助其他人,我只想补充一点,当前版本的JPQL不支持FROM子句中的子查询。从JPQL参考中:

子查询仅限于本版本中的WHERE和HAVING子句。FROM子句中对子查询的支持将在规范的后续版本中考虑

当我必须在项目上执行类似的操作时,我必须将聚合子查询向下移动到where子句中,向实体添加一个比较器,然后在JPQL调用后执行Collections.sort。因此,查询将变成以下内容:

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

在query.getResultList之后使用Collections.sort

我也尝试过,但没有成功query query=em.createquery从Zp01 p2中选择p2,选择G.TYPEC,按G.TYPEC>0 p1的G.TYPEC将G.TYPEC从规划CUISSON G组中计算为cnt_TYPEC,其中p2.typeCuisson=p1.TYPEC和p2.ordre不在由p1.cnt_TYPEC asc从正式订单中选择的k.numof和p2.gestionnaire中;
...
WHERE p2.typeCuisson IN (SELECT G.TYPEC 
FROM PlanningCuisson G 
GROUP BY G.TYPEC 
HAVING COUNT(G.TYPEC) > 0)...