diff --git a/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryExecution.java b/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryExecution.java index 33d362483..fcaf3e9a1 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryExecution.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryExecution.java @@ -15,6 +15,8 @@ */ package org.springframework.data.jpa.repository.query; +import java.util.List; + import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.Query; @@ -94,7 +96,8 @@ public abstract class JpaQueryExecution { // Execute query to compute total Query projection = repositoryQuery.createCountQuery(values); - Long total = (Long) projection.getSingleResult(); + List counts = projection.getResultList(); + Long total = counts.size() == 1 ? counts.get(0) : counts.size(); Query query = repositoryQuery.createQuery(values); diff --git a/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java b/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java index af579d7f9..c6471bd49 100644 --- a/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java @@ -725,6 +725,15 @@ public class UserRepositoryTests { assertThat(result, hasItem(firstUser)); } + @Test + public void executesPaginationForGroupByQueryCorrectly() { + + flushTestUsers(); + + Page results = repository.findWithGroupBy(new PageRequest(0, 10)); + assertThat(results.getTotalPages(), is(1)); + } + private Page executeSpecWithSort(Sort sort) { flushTestUsers(); diff --git a/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java b/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java index 0d04d43c9..9a36e7ed5 100644 --- a/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java +++ b/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java @@ -178,4 +178,7 @@ public interface UserRepository extends JpaRepository, JpaSpecifi List findBySpringDataNamedQuery(String lastname); Page findByLastnameLike(Pageable pageable, String lastname); + + @Query("select u.lastname from User u group by u.lastname") + Page findWithGroupBy(Pageable pageable); }