What does EntityManager.getSingleResult()
return for a COUNT query?
So.. what is the precise runtime type of foo?
Object foo = em.createQuery("SELECT COUNT(t) FROM com.company.Thing t WHERE prop = :param")
.setParameter("param", value).getSingleResult();
Run Code Online (Sandbox Code Playgroud)
Pas*_*ent 42
根据JPA规范,COUNT返回Long:
4.8.4 SELECT子句中的聚合函数查询的结果
可能是应用于路径表达式的聚合函数的结果.
可以在查询的SELECT子句中使用以下聚合函数:AVG,COUNT,MAX,MIN,SUM.
对于除COUNT之外的所有聚合函数,作为聚合函数的参数的路径表达式必须在状态字段中终止.COUNT的路径表达式参数可以在state-field或association-field中终止,或者COUNT的参数可以是标识变量.
SUM和AVG函数的参数必须是数字.函数MAX和MIN的参数必须对应于可订购的状态字段类型(即数字类型,字符串类型,字符类型或日期类型).
使用聚合函数的查询结果中包含的Java类型如下:
- COUNT返回Long.
- MAX,MIN返回它们所应用的状态字段的类型.
- AVG返回Double.
- 当应用于整数类型的状态字段(BigInteger除外)时,SUM返回Long; 应用于浮点类型的状态字段时为Double; 应用于BigInteger类型的状态字段时的BigInteger; 和BigDecimal应用于BigDecimal类型的状态字段.
如果使用SUM,AVG,MAX或MIN,并且没有可以应用聚合函数的值,则聚合函数的结果为NULL.
如果使用COUNT,并且没有可以应用COUNT的值,则聚合函数的结果为0.
聚合函数的参数可以在关键字DISTINCT之后,以指定在应用聚合函数之前消除重复值.
无论是否指定了关键字DISTINCT,在应用聚合函数之前都会消除空值.
lgu*_*lgu 15
注意:JQPL和Native查询之间存在差异
查询查询= em.createQuery("SELECT COUNT(p)FROM PersonEntity p");
query.getSingleResult().getClass().getCanonicalName() - > java.lang.Long
查询查询= em.createNativeQuery("SELECT COUNT(*)FROM PERSON");
query.getSingleResult().getClass().getCanonicalName() - > java.math.BigInteger
COUNT(t) 具体返回 java.lang.Long。当它在此上下文中单独出现时,它会按原样返回。
(在其他情况下,COUNT 生成的 Long 可能会被换行,但现在不是。)
归档时间: |
|
查看次数: |
37550 次 |
最近记录: |