From 7ed684b0ab992371d06728002b520be363383d3c Mon Sep 17 00:00:00 2001 From: Thomas Darimont Date: Mon, 23 Feb 2015 11:52:30 +0100 Subject: [PATCH] DATAJPA-679 - Added QueryDslPredicateExecutor.findAll(Predicate, Sort). We now support findAll on QueryDslJpaRepository that accepts a Querydsl Predicate and a Sort and returns a List. Original pull request: #135. --- .../support/QueryDslJpaRepository.java | 23 ++++++++++++++++++- .../support/QueryDslJpaRepositoryTests.java | 14 +++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/jpa/repository/support/QueryDslJpaRepository.java b/src/main/java/org/springframework/data/jpa/repository/support/QueryDslJpaRepository.java index 5a87ca111..9c8e0d585 100644 --- a/src/main/java/org/springframework/data/jpa/repository/support/QueryDslJpaRepository.java +++ b/src/main/java/org/springframework/data/jpa/repository/support/QueryDslJpaRepository.java @@ -27,6 +27,7 @@ import javax.persistence.LockModeType; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; import org.springframework.data.jpa.repository.query.Jpa21Utils; import org.springframework.data.jpa.repository.query.JpaEntityGraph; import org.springframework.data.querydsl.EntityPathResolver; @@ -114,6 +115,15 @@ public class QueryDslJpaRepository extends SimpleJpa return executeSorted(createQuery(predicate), orders); } + /* + * (non-Javadoc) + * @see org.springframework.data.querydsl.QueryDslPredicateExecutor#findAll(com.mysema.query.types.Predicate, org.springframework.data.domain.Sort) + */ + @Override + public List findAll(Predicate predicate, Sort sort) { + return executeSorted(createQuery(predicate), sort); + } + /* * (non-Javadoc) * @see org.springframework.data.querydsl.QueryDslPredicateExecutor#findAll(com.mysema.query.types.OrderSpecifier[]) @@ -204,6 +214,17 @@ public class QueryDslJpaRepository extends SimpleJpa * @return */ private List executeSorted(JPQLQuery query, OrderSpecifier... orders) { - return querydsl.applySorting(new QSort(orders), query).list(path); + return executeSorted(query, new QSort(orders)); + } + + /** + * Executes the given {@link JPQLQuery} after applying the given {@link Sort}. + * + * @param query must not be {@literal null}. + * @param sort must not be {@literal null}. + * @return + */ + private List executeSorted(JPQLQuery query, Sort sort) { + return querydsl.applySorting(sort, query).list(path); } } diff --git a/src/test/java/org/springframework/data/jpa/repository/support/QueryDslJpaRepositoryTests.java b/src/test/java/org/springframework/data/jpa/repository/support/QueryDslJpaRepositoryTests.java index 335440dbe..ba0ed6f56 100644 --- a/src/test/java/org/springframework/data/jpa/repository/support/QueryDslJpaRepositoryTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/support/QueryDslJpaRepositoryTests.java @@ -336,4 +336,18 @@ public class QueryDslJpaRepositoryTests { assertThat(repository.exists(user.firstname.eq("Unknown")), is(false)); assertThat(repository.exists((Predicate) null), is(true)); } + + /** + * @see DATAJPA-679 + */ + @Test + public void shouldSupportFindAllWithPredicateAndSort() { + + List users = repository.findAll(user.dateOfBirth.isNull(), new Sort(Direction.ASC, "firstname")); + + assertThat(users, hasSize(3)); + assertThat(users.get(0).getFirstname(), is(carter.getFirstname())); + assertThat(users.get(2).getFirstname(), is(oliver.getFirstname())); + assertThat(users, hasItems(carter, dave, oliver)); + } }