代码之家  ›  专栏  ›  技术社区  ›  Simon Gibbs

对于count查询,jpa entitymanager.getsingleResult()返回了什么?

  •  27
  • Simon Gibbs  · 技术社区  · 16 年前

    什么? EntityManager.getSingleResult() 是否返回进行计数查询?

    所以…foo的精确运行时类型是什么?

    Object foo = em.createQuery("SELECT COUNT(t) FROM com.company.Thing t WHERE prop = :param")
           .setParameter("param", value).getSingleResult();
    
    7 回复  |  直到 7 年前
        1
  •  41
  •   Simon Gibbs    7 年前

    按照 JPA specification ,count返回一个长:

    4.8.4集合select子句中的函数查询结果

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

    以下聚合函数可以 在的select子句中使用 查询:avg、count、max、min、sum。

    对于所有聚合函数 count,路径表达式 聚合函数的参数 必须在状态字段中终止。这个 计数的路径表达式参数可以 在状态字段或 关联字段,或参数 计数可以是一个标识 变量。

    函数sum和avg的参数 必须是数字。的参数 函数max和min必须对应 到可订购状态字段类型(即, 数字类型、字符串类型、字符 类型或日期类型)。

    包含在Java中的Java类型 使用聚合的查询结果 功能如下:

    • count返回long。
    • max,min返回应用它们的状态字段的类型。
    • avg返回双倍。
    • 当应用于整型(其他)的状态字段时,sum返回long 大于biginteger);应用时为double 状态浮点字段 类型;应用于时为BigInteger biginteger类型的状态字段;以及 应用于时为BigDecimal BigDecimal类型的状态字段。

    如果使用SUM、AVG、MAX或MIN,以及 没有任何值 可以应用聚合函数, 聚合函数的结果是 无效的。

    如果使用了count,则没有 可应用计数的值, 聚合函数的结果 是0。

    聚合函数的参数 前面可以是关键字 distinct指定该副本 在 应用了聚合函数。

    在 应用了聚合函数, 不管关键字是否 已指定distinct。

        2
  •  13
  •   Thanthu    7 年前

    注意:两者之间有区别 JQPL 和 本地人 查询

    Query query = em.createQuery("SELECT COUNT(p) FROM PersonEntity p " );
    

    query.getSingleResult().getClass().getCanonicalName() ---GT; JavaLang.Lon

    Query query = em.createNativeQuery("SELECT COUNT(*) FROM PERSON " );
    

    query.getSingleResult().getClass().getCanonicalName()) ---GT; java.math.biginteger

        3
  •  10
  •   user6645244    10 年前

    本机查询可以基于数据库驱动程序返回不同的计数对象;但是,所有这些对象都扩展java.lang.number,实现了longvalue()方法。

        4
  •  2
  •   Simon Gibbs    16 年前

    count(t)专门返回java.lang.long。当它在这个上下文中单独出现时,它将按原样返回。

    (在其他情况下,由count生成的long可以被包装,但今天不行。)

        5
  •  1
  •   Petar Minchev    16 年前

    显然,一个数字是查询的计数:)它的类型(按规范)是长的。

        6
  •  1
  •   Bogdan    16 年前

    afaik count函数返回long

        7
  •  1
  •   Tiago Moura    7 年前

    您可以直接返回整数,而不是长整数。

    return query.getSingleResult() != null ? Integer.parseInt(query.getSingleResult().toString()) : 0;