如何在 JPQL 中使用 GROUP BY 和 UNION

Posted

技术标签:

【中文标题】如何在 JPQL 中使用 GROUP BY 和 UNION【英文标题】:How to use GROUP BY with UNION in JPQL 【发布时间】:2014-03-09 04:23:18 【问题描述】:

我想用 JPQL 为我在 Primefaces p:dataTable 中的输出生成一些数据。我使用以下查询。

Query query = this.em.createQuery("SELECT a FROM ProffesorTable a WHERE 
  a.fkProffesorID.name LIKE '"+buffervarQuery+"%' AND a.fkProffesorID.release='TRUE' 
UNION  
(SELECT a FROM ProffesorTable a WHERE a.fkProffesorID.name LIKE '%"+buffervarQuery+"'
  AND a.fkProffesorID.release='TRUE') GROUP BY a.fkProffesorID.name ");

result = query.getResultList();

我收到以下异常

原因:java.lang.IllegalArgumentException:在 EntityManager 中创建查询时发生异常: 异常说明:编译时遇到内部问题 [从 ProffesorTable 中选择 a.fkProffesorID.name LIKE 'sie%' AND a.fkProffesorID.release='TRUE' 联盟 (从 ProffesorTable 中选择 a.fkProffesorID.name LIKE '%sie' AND a.fkProffesorID.name='TRUE')按 a.fkProffesorID.name 分组“)]。 [249, 277] 查询包含格式错误的结尾。 在 org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1585) 在 com.sun.enterprise.container.common.impl.EntityManagerWrapper.createQuery(EntityManagerWrapper.java:456)

【问题讨论】:

联合在 JPA 中不受支持。检查 [this answer][***.com/questions/17050589/… 以获取替代解决方案。 感谢您的回答。这不好,我们没有使用 EclipseLink 为这个问题查询提供了替代解决方案。 【参考方案1】:

您的简单查询可以转换成这个,并且 jpql 也支持。

SELECT a FROM ProffesorTable a
  WHERE (a.fkProffesorID.name LIKE '"+buffervarQuery+"%' or a.fkProffesorID.name LIKE '%"+buffervarQuery+"')
    AND a.fkProffesorID.release='TRUE' 
  GROUP BY a.fkProffesorID.name

【讨论】:

以上是关于如何在 JPQL 中使用 GROUP BY 和 UNION的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Spring Data JPA GROUP BY 查询中返回自定义对象

如何通过 group_by 中的 group-number 对数据表进行编号/标记?

我们如何使用 GROUP BY 加入结果

在 Django 模型上执行 INNER JOIN、GROUP BY 和 COUNT

如何在 JPQL 中查找第一个

如何在 JPQL(Spring JPA 查询)中使用 JOIN 执行 UPDATE 语句?