如何在JPQL中使用GROUP BY和UNION

时间:2014-02-11 11:44:07

标签: java jpa ejb jpql

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

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中创建查询时发生异常:   例外说明:编译时遇到的内部问题   [选择一个FROM ProffesorTable a WHERE a.fkProffesorID.name LIKE' sie%' AND a.fkProffesorID.release =' TRUE'   UNION
  (选择一个FROM ProffesorTable a WHERE a.fkProffesorID.name LIKE'%sie' AND a.fkProffesorID.name =' TRUE')GROUP BY 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)

1 个答案:

答案 0 :(得分:0)

您的简单查询可以转换为此查询以及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