【问题标题】:Group by in JPA criteria query在 JPA 条件查询中分组
【发布时间】:2014-02-04 14:31:19
【问题描述】:

我有一张这样的桌子:

  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();

谢谢。

【问题讨论】:

  • 这样的列表在从数据库中获取所需的行后可以更好地显示。直接查询的可能性很小(虽然不确定)。

标签: mysql jpa criteria


【解决方案1】:

即使使用 SQL 标准也无法实现您想要执行的 AFAIK 查询。

聚合函数可能取决于数据库供应商。

因为使用 SQL 标准是不可能的,所以使用 JPQL 肯定是不可能的。

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

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

PS。您提供的代码意味着您不了解 JPA 将生成什么查询。我建议你尝试在 MySQL 中编写查询,然后将其转换为 JPQL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    相关资源
    最近更新 更多