如何在 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 对数据表进行编号/标记?