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..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 @@ -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 projections 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));