As per the JPA specification, COUNT returns a Long:
4.8.4 Aggregate Functions in the SELECT Clause The result of a query
may be the result of an aggregate
function applied to a path expression.
The following aggregate functions can
be used in the SELECT clause of a
query: AVG, COUNT, MAX, MIN, SUM.
For all aggregate functions except
COUNT, the path expression that is the
argument to the aggregate function
must terminate in a state-field. The
path expression argument to COUNT may
terminate in either a state-field or a
association-field, or the argument to
COUNT may be an identification
variable.
Arguments to the functions SUM and AVG
must be numeric. Arguments to the
functions MAX and MIN must correspond
to orderable state-field types (i.e.,
numeric types, string types, character
types, or date types).
The Java type that is contained in the
result of a query using an aggregate
function is as follows:
- COUNT returns Long.
- MAX, MIN return the type of the state-field to which they are applied.
- AVG returns Double.
- SUM returns Long when applied to state-fields of integral types (other
than BigInteger); Double when applied
to state-fields of floating point
types; BigInteger when applied to
state-fields of type BigInteger; and
BigDecimal when applied to
state-fields of type BigDecimal.
If SUM, AVG, MAX, or MIN is used, and
there are no values to which the
aggregate function can be applied, the
result of the aggregate function is
NULL.
If COUNT is used, and there are no
values to which COUNT can be applied,
the result of the aggregate function
is 0.
The argument to an aggregate function
may be preceded by the keyword
DISTINCT to specify that duplicate
values are to be eliminated before the
aggregate function is applied.
Null values are eliminated before the
aggregate function is applied,
regardless of whether the keyword
DISTINCT is specified.