From 505373c06242fe52689a221d6a890a91a4882ed8 Mon Sep 17 00:00:00 2001 From: Marcel Overdijk Date: Tue, 26 Sep 2017 09:49:59 +0200 Subject: [PATCH 1/2] Dynamic projection in combination with pagination not working --- .../jpa/projections/CustomerRepository.java | 12 +++++++++++- .../CustomerRepositoryIntegrationTest.java | 9 +++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/jpa/example/src/main/java/example/springdata/jpa/projections/CustomerRepository.java b/jpa/example/src/main/java/example/springdata/jpa/projections/CustomerRepository.java index 752c3e88c..d25668b62 100644 --- a/jpa/example/src/main/java/example/springdata/jpa/projections/CustomerRepository.java +++ b/jpa/example/src/main/java/example/springdata/jpa/projections/CustomerRepository.java @@ -23,11 +23,12 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.PagingAndSortingRepository; /** * @author Oliver Gierke */ -public interface CustomerRepository extends CrudRepository { +public interface CustomerRepository extends PagingAndSortingRepository { /** * Uses a projection interface to indicate the fields to be returned. As the projection doesn't use any dynamic @@ -97,6 +98,15 @@ public interface CustomerRepository extends CrudRepository { */ Page findPagedProjectedBy(Pageable pageable); + /** + * Dyanmic rojections used with pagination. + * + * @param pageable + * @param projection + * @return + */ + Page findPagedProjectedBy(Pageable pageable, Class projection); + /** * A DTO projection using a constructor expression in a manually declared query. * diff --git a/jpa/example/src/test/java/example/springdata/jpa/projections/CustomerRepositoryIntegrationTest.java b/jpa/example/src/test/java/example/springdata/jpa/projections/CustomerRepositoryIntegrationTest.java index 4573ae37f..8392fe5fa 100644 --- a/jpa/example/src/test/java/example/springdata/jpa/projections/CustomerRepositoryIntegrationTest.java +++ b/jpa/example/src/test/java/example/springdata/jpa/projections/CustomerRepositoryIntegrationTest.java @@ -135,6 +135,15 @@ public void supportsProjectionInCombinationWithPagination() { assertThat(page.getContent().get(0).getFirstname(), is("Carter")); } + @Test + public void supportsDynamicProjectionInCombinationWithPagination() { + + Page page = customers + .findPagedProjectedBy(new PageRequest(0, 1, new Sort(Direction.ASC, "lastname")), CustomerProjection.class); + + assertThat(page.getContent().get(0).getFirstname(), is("Carter")); + } + @Test public void appliesProjectionToOptional() { assertThat(customers.findOptionalProjectionByLastname("Beauford").isPresent(), is(true)); From e19d4d23fbcd051b3e0e1b864f61d83a909744f5 Mon Sep 17 00:00:00 2001 From: Marcel Overdijk Date: Tue, 26 Sep 2017 09:53:49 +0200 Subject: [PATCH 2/2] Typo --- .../example/springdata/jpa/projections/CustomerRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jpa/example/src/main/java/example/springdata/jpa/projections/CustomerRepository.java b/jpa/example/src/main/java/example/springdata/jpa/projections/CustomerRepository.java index d25668b62..90e82bc8c 100644 --- a/jpa/example/src/main/java/example/springdata/jpa/projections/CustomerRepository.java +++ b/jpa/example/src/main/java/example/springdata/jpa/projections/CustomerRepository.java @@ -99,7 +99,7 @@ public interface CustomerRepository extends PagingAndSortingRepository findPagedProjectedBy(Pageable pageable); /** - * Dyanmic rojections used with pagination. + * Dyanmic projections used with pagination. * * @param pageable * @param projection