From 07556ec58c10139d2204cae2fc8a1675d59c2f93 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 23 Nov 2011 10:58:22 +0100 Subject: [PATCH] DATAMONGO-323 - Annotated repository queries consider dynamic sort now. Applying a Sort parameter handed into a repository query method now for string based (aka. @Query annotated) queries. --- .../query/StringBasedMongoQuery.java | 2 ++ ...stractPersonRepositoryIntegrationTests.java | 18 ++++++++++++++++++ .../mongodb/repository/PersonRepository.java | 3 +++ 3 files changed, 23 insertions(+) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/StringBasedMongoQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/StringBasedMongoQuery.java index cb40c0f8f..b421b92a2 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/StringBasedMongoQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/StringBasedMongoQuery.java @@ -74,6 +74,8 @@ public class StringBasedMongoQuery extends AbstractMongoQuery { } else { query = new BasicQuery(queryString); } + + QueryUtils.applySorting(query, accessor.getSort()); if (LOG.isDebugEnabled()) { LOG.debug(String.format("Created query %s", query.getQueryObject())); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java index 5890ca376..e2262fcd2 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java @@ -365,4 +365,22 @@ public abstract class AbstractPersonRepositoryIntegrationTests { Metrics.KILOMETERS)); assertThat(results.getContent().isEmpty(), is(false)); } + + /** + * @see DATAMONGO-323 + */ + @Test + public void considersSortForAnnotatedQuery() { + + List result = repository.findByAgeLessThan(60, new Sort("firstname")); + + assertThat(result.size(), is(7)); + assertThat(result.get(0), is(alicia)); + assertThat(result.get(1), is(boyd)); + assertThat(result.get(2), is(carter)); + assertThat(result.get(3), is(dave)); + assertThat(result.get(4), is(leroi)); + assertThat(result.get(5), is(oliver)); + assertThat(result.get(6), is(stefan)); + } } \ No newline at end of file diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java index 8fcd211a2..4968c649f 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java @@ -72,6 +72,9 @@ public interface PersonRepository extends MongoRepository, Query List findByFirstnameLike(String firstname); List findByFirstnameLikeOrderByLastnameAsc(String firstname, Sort sort); + + @Query("{'age' : { '$lt' : ?0 } }") + List findByAgeLessThan(int age, Sort sort); /** * Returns a page of {@link Person}s with a lastname mathing the given one (*-wildcards supported).