JPA EntityManager.getSingleResult() 为 COUNT 查询返回什么?

新手上路,请多包涵

EntityManager.getSingleResult() 为 COUNT 查询返回什么?

那么.. foo 的精确运行时类型是什么?

 Object foo = em.createQuery("SELECT COUNT(t) FROM com.company.Thing t WHERE prop = :param")
       .setParameter("param", value).getSingleResult();

原文由 Simon Gibbs 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

COUNT(t) 具体返回 java.lang.Long。当它在此上下文中单独出现时,将按原样返回。

(在其他情况下,COUNT 生成的 Long 可能会被包装,但今天不会。)

原文由 Simon Gibbs 发布,翻译遵循 CC BY-SA 2.5 许可协议

根据 JPA 规范,COUNT 返回一个 Long:

4.8.4 SELECT 子句中的聚合函数查询的结果

可能是应用于路径表达式的聚合函数的结果。

以下聚合函数可用于查询的 SELECT 子句:AVG、COUNT、MAX、MIN、SUM。

对于除 COUNT 之外的所有聚合函数,作为聚合函数参数的路径表达式必须在状态字段中终止。 COUNT 的路径表达式参数可以终止于状态字段或关联字段,或者 COUNT 的参数可以是标识变量。

函数 SUM 和 AVG 的参数必须是数字。函数 MAX 和 MIN 的参数必须对应于可排序的状态字段类型(即数字类型、字符串类型、字符类型或日期类型)。

使用聚合函数的查询结果中包含的 Java 类型如下:

  • COUNT 返回长。
  • MAX、MIN 返回应用它们的状态字段的类型。
  • AVG 返回 Double。
  • SUM 在应用于整数类型的状态字段(BigInteger 除外)时返回 Long;应用于浮点类型的状态字段时加倍; BigInteger 当应用于 BigInteger 类型的状态字段时;和 BigDecimal 当应用于 BigDecimal 类型的状态字段时。

如果使用 SUM、AVG、MAX 或 MIN,并且没有可以应用聚合函数的值,则聚合函数的结果为 NULL。

如果使用 COUNT,并且没有可以应用 COUNT 的值,则聚合函数的结果为 0。

聚合函数的参数前面可以有关键字 DISTINCT,以指定在应用聚合函数之前消除重复值。

无论是否指定关键字 DISTINCT,在应用聚合函数之前都会消除空值。

原文由 Pascal Thivent 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏