【问题标题】:How to use GROUP BY with UNION in JPQL如何在 JPQL 中使用 GROUP BY 和 UNION
【发布时间】: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][stackoverflow.com/questions/17050589/… 以获取替代解决方案。
  • 感谢您的回答。这不好,我们没有使用 EclipseLink 为这个问题查询提供了替代解决方案。

标签: java jpa ejb jpql


【解决方案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

【讨论】:

    猜你喜欢
    • 2010-12-08
    • 2012-09-11
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多