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 72b3f1eea..3d94aa616 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 @@ -161,13 +161,20 @@ public abstract class JpaQueryExecution { Pageable pageable = accessor.getPageable(); Query createQuery = query.createQuery(values); - int pageSize = pageable.getPageSize(); - createQuery.setMaxResults(pageSize + 1); + + int pageSize = 0; + if (pageable.isPaged()) { + + pageSize = pageable.getPageSize(); + createQuery.setMaxResults(pageSize + 1); + } List resultList = createQuery.getResultList(); - boolean hasNext = resultList.size() > pageSize; - return new SliceImpl(hasNext ? resultList.subList(0, pageSize) : resultList, pageable, hasNext); + boolean hasNext = pageable.isPaged() && resultList.size() > pageSize; + + return new SliceImpl<>(hasNext ? resultList.subList(0, pageSize) : resultList, pageable, hasNext); + } } @@ -225,8 +232,8 @@ public abstract class JpaQueryExecution { private final boolean clear; /** - * Creates an execution that automatically flushes the given {@link EntityManager} before execution and/or - * clears the given {@link EntityManager} after execution. + * Creates an execution that automatically flushes the given {@link EntityManager} before execution and/or clears + * the given {@link EntityManager} after execution. * * @param em Must not be {@literal null}. */ diff --git a/src/test/java/org/springframework/data/jpa/repository/UserRepositoryFinderTests.java b/src/test/java/org/springframework/data/jpa/repository/UserRepositoryFinderTests.java index c2f65e051..de9720d64 100644 --- a/src/test/java/org/springframework/data/jpa/repository/UserRepositoryFinderTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/UserRepositoryFinderTests.java @@ -30,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Slice; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.sample.Role; @@ -193,6 +194,16 @@ public class UserRepositoryFinderTests { assertThat(slice.hasNext(), is(true)); } + @Test // DATAJPA-1554 + public void executesQueryToSliceWithUnpaged() { + + Slice slice = userRepository.findSliceByLastname("Matthews", Pageable.unpaged()); + + assertThat(slice, containsInAnyOrder(dave, oliver)); + assertThat(slice.getNumberOfElements(), is(2)); + assertThat(slice.hasNext(), is(false)); + } + @Test // DATAJPA-830 public void executesMethodWithNotContainingOnStringCorrectly() { assertThat(userRepository.findByLastnameNotContaining("u"), containsInAnyOrder(dave, oliver));