From 4b552b051ec0076da672b33f617ce965f6ffd6f7 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 13 Sep 2017 08:47:48 +0200 Subject: [PATCH] =?UTF-8?q?DATAMONGO-1779=20-=20Fixed=20handling=20of=20em?= =?UTF-8?q?pty=20queries=20in=20MongoTemplate.find(=E2=80=A6).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Calls to MongoTemplate.find(…) were routed to ….findAll(…) in case no criteria definition or sort was defined on the query. This however neglected that cursor preparation aspects (limits, skips) are defined on the query as well which cause them not to be applied correctly. Removed the over-optimistic re-routing so that normal query execution now always gets applied. --- .../data/mongodb/core/MongoTemplate.java | 6 +----- .../data/mongodb/core/MongoTemplateTests.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java index 225f623e6..84585e29d 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java @@ -761,16 +761,12 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, * @see org.springframework.data.mongodb.core.MongoOperations#findOne(org.springframework.data.mongodb.core.query.Query, java.lang.Class, java.lang.String) */ @Override - public List find(final Query query, Class entityClass, String collectionName) { + public List find(Query query, Class entityClass, String collectionName) { Assert.notNull(query, "Query must not be null!"); Assert.notNull(collectionName, "CollectionName must not be null!"); Assert.notNull(entityClass, "EntityClass must not be null!"); - if (query.getQueryObject().isEmpty() && query.getSortObject().isEmpty()) { - return findAll(entityClass, collectionName); - } - return doFind(collectionName, query.getQueryObject(), query.getFieldsObject(), entityClass, new QueryCursorPreparer(query, entityClass)); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java index ee7549034..353685726 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java @@ -15,8 +15,12 @@ */ package org.springframework.data.mongodb.core; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.fail; import static org.hamcrest.Matchers.*; +import static org.hamcrest.Matchers.not; import static org.junit.Assert.*; +import static org.junit.Assert.assertThat; import static org.junit.Assume.*; import static org.springframework.data.mongodb.core.query.Criteria.*; import static org.springframework.data.mongodb.core.query.Query.*; @@ -3256,6 +3260,17 @@ public class MongoTemplateTests { assertThat(template.count(new BasicQuery("{}"), template.determineCollectionName(Sample.class)), is(equalTo(1L))); } + @Test // DATAMONGO-1779 + public void appliesQueryLimitToEmptyQuery() { + + Sample first = new Sample("1", "Dave Matthews"); + Sample second = new Sample("2", "Carter Beauford"); + + template.insertAll(Arrays.asList(first, second)); + + assertThat(template.find(new Query().limit(1), Sample.class)).hasSize(1); + } + static class TypeWithNumbers { @Id String id;