From 481d1b0a0df9cffa24cb5d2b72d190a7b51c332c Mon Sep 17 00:00:00 2001 From: "Greg L. Turnquist" Date: Thu, 12 May 2022 14:38:18 -0500 Subject: [PATCH] Verify custom finders can handle PageRequest as method parameter. Spring Data Commons patched handling subclasses of special parameter types through spring-projects/spring-data-commons#2626. This commit adds test cases ensuring things work properly with Spring Data JPA. See #2013. --- .../jpa/repository/UserRepositoryTests.java | 26 +++++++++++++++++++ .../jpa/repository/sample/UserRepository.java | 14 +++++++--- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java index 3099c04cb..4fd24561d 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java @@ -1709,6 +1709,32 @@ public class UserRepositoryTests { assertThat(users).hasSize(0); } + @Test // GH-2013 + void findByCollectionWithPageable() { + + flushTestUsers(); + + Page userPage = repository.findByAgeIn(List.of(28, 35), (Pageable) PageRequest.of(0, 2)); + + assertThat(userPage).hasSize(2); + assertThat(userPage.getTotalElements()).isEqualTo(2); + assertThat(userPage.getTotalPages()).isEqualTo(1); + assertThat(userPage.getContent()).containsExactlyInAnyOrder(firstUser, secondUser); + } + + @Test // GH-2013 + void findByCollectionWithPageRequest() { + + flushTestUsers(); + + Page userPage = repository.findByAgeIn(List.of(28, 35), (PageRequest) PageRequest.of(0, 2)); + + assertThat(userPage).hasSize(2); + assertThat(userPage.getTotalElements()).isEqualTo(2); + assertThat(userPage.getTotalPages()).isEqualTo(1); + assertThat(userPage.getContent()).containsExactlyInAnyOrder(firstUser, secondUser); + } + @Test // DATAJPA-606 void findByEmptyArrayOfIntegers() { diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java index e5a748e97..7937474d1 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java @@ -15,6 +15,9 @@ */ package org.springframework.data.jpa.repository.sample; +import jakarta.persistence.EntityManager; +import jakarta.persistence.QueryHint; + import java.util.Collection; import java.util.Date; import java.util.List; @@ -23,10 +26,8 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Stream; -import jakarta.persistence.EntityManager; -import jakarta.persistence.QueryHint; - 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; @@ -52,6 +53,7 @@ import org.springframework.transaction.annotation.Transactional; * @author Jeff Sheets * @author Andrey Kovalev * @author JyotirmoyVS + * @author Greg Turnquist */ public interface UserRepository extends JpaRepository, JpaSpecificationExecutor, UserRepositoryCustom { @@ -504,6 +506,12 @@ public interface UserRepository // DATAJPA-606 List findByAgeIn(Collection ages); + // GH-2013 + Page findByAgeIn(Collection ages, Pageable pageable); + + // GH-2013 + Page findByAgeIn(Collection ages, PageRequest pageable); + // DATAJPA-606 List queryByAgeIn(Integer[] ages);