As documented, CriteriaBuilder.count returns Expression<java.lang.Long>
. Consequently type argument to CriteriaQuery
and TypedQuery
should be Long as well. Same holds true for type of count
variable.
When there is only one value to be selected, then it makes sense to use CriteriaQuery.select instead of multiselect, because then such an error is catched already in compile time.
Long count;
...
CriteriaQuery<Long> cq1 = cb1.createQuery(Long.class);
...
cq1.select(cb1.count(cq1.from(RelatedElements.class)));
...
TypedQuery<Long> qry = entityManager.createQuery(cq1);