按JPA条件查询分组

时间:2014-02-04 14:31:19

标签: mysql jpa criteria

我有一张类似的表:

  id  |  value  |  name
------+---------+--------
  1   |    a    | name1  
  2   |    b    | name2  
  3   |    a    | name3  
  4   |    a    | name4  
  5   |    c    | name5 
  6   |    b    | name6  
  7   |    c    | name7  
  8   |    b    | name8    

我想要的是:

  id  |  value  |  names
------+---------+---------------------------
  1   |    a    | name1 , name3, name4
  2   |    b    | name2 , name6, name8
  3   |    c    | name5 , name7

实际上我想获取每个组中的所有记录并迭代这些记录。 我试过这段代码,但它不起作用:

javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
Root<T> c = cq.from(entityClass);

cq.select(c);

cq.groupBy(c.get("value"));
javax.persistence.Query q = getEntityManager().createQuery(cq);
return q.getResultList();

感谢。

1 个答案:

答案 0 :(得分:0)

即使使用SQL Standard,也无法进行AFAIK查询。

可以使用依赖于数据库供应商的聚合功能。

由于SQL标准无法确定使用JPQL是不可能的。

以下是JPQL支持的聚合函数:http://docs.oracle.com/cd/E11035_01/kodo41/full/html/ejb3_langref.html#ejb3_langref_aggregates

我很确定您必须自己进行转换或使用您需要的数据创建视图,然后查询视图

PS。您呈现的代码暗示您不理解JPA将生成什么查询。我建议你尝试在MySQL中编写查询,然后将其转换为JPQL。