当前位置: 首页 > 知识库问答 >
问题:

JPA2CriteriaQuery在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中

许琛
2023-03-14
Column 'A.PK' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Criteria criteria = getSession().createCriteria(A.class);
criteria.setProjection(Projections.groupProperty("b"));
return criteria.list();

这不会:

Session session = getSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<A> criteriaQuery = builder.createQuery(A.class);
Root<A> root = criteriaQuery.from(A.class);
criteriaQuery.groupBy(root.get("b"));
return session.createQuery(criteriaQuery).list();

共有1个答案

孙光临
2023-03-14

假设您有以下映射:

@Entity
class A {

   @ManyToOne
   private B b;
}

@Entity
class B {

  @Id
  private Long id;
}
  1. 过时的条件:
Criteria criteria = getSession().createCriteria(A.class);
criteria.setProjection(Projections.groupProperty("b"));
List<B> result = criteria.list();

实际执行查询,如下所示:

select b_id
from A
group by b_id
sql prettyprint-override">select * from B where id = ?
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<B> criteriaQuery = builder.createQuery(B.class);
Root<A> root = criteriaQuery.from(A.class);
      
Join<A, B> bJoin = root.join("b");
      
criteriaQuery.groupBy(bJoin.get("id"));
criteriaQuery.select( root.get("b") );
List<B> result = session.createQuery(criteriaQuery).list();
 类似资料:
  • 好的,我正在使用hibernate在我的SpringBoot应用程序中运行下面的SQL本机查询,请注意这个查询在SQL Management Studio中运行良好,并返回一些结果。在我的IDE中,我可以使用JDBC驱动程序连接到我的SQL Server2017,我仍然可以运行这个查询并返回一些结果,现在是奇怪的部分,当相同的查询在应用程序中运行时,我会得到以下错误: 我实际上得到了适当的输出,那

  • 我有一个如下所示的查询 但当我执行上面的sql时,出现了一个错误: 预期结果: 上面的SQL有什么问题?

  • 我们有一个表,它将捕获每个的刷卡记录。我正在尝试编写一个查询,以获取今天第一次刷取的非重复员工记录列表。 我们正在列中保存刷卡日期信息。下面是我的查询,它抛出异常。 获取错误: 列“interface.dbo.vwempSwipeDetail.Employee First Name”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。 有什么需要帮忙的吗? 提前道谢。

  • 我知道这个主题已经讨论了类似的问题,我已经看过了答案,但不幸的是,我只是不知道如何应用于这个查询。我知道将'pe.short_name'添加到GROUP BY也不是处理这个问题的最佳方法。非常感谢任何建议。 列'pe.short_name'在select列表中无效,因为它包含在聚合函数或GROUP BY子句中.`

  • 问题内容: 我正在尝试返回一个表格,其中包含使用嵌套集模型表示的层次结构中节点的深度,我正在按照本教程进行操作,但是“查找节点的深度”部分中使用的查询对我不起作用:http://mikehillyer.com/articles/managing- hierarchical-data-in-mysql/ 运行此查询,我得到一个错误“ 列’CompanyGroup.GroupName’在选择列表中无效

  • 问题内容: 我有一个错误- 选择列表中的“ Employee.EmpID”列无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。 这种情况符合Bill Karwin的回答。 上面的更正,适合ExactaBox的回答- 原始问题- 对于SQL查询- 我不明白为什么会收到此错误。我要做的就是加入表格,然后将特定位置的所有员工分组在一起。 我认为我对自己的问题有部分解释。 告诉我是否还可