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 3bc8e75d3..f2c690afe 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 @@ -2179,7 +2179,8 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware { cursorToUse = cursorToUse.limit(query.getLimit()); } if (query.getSortObject() != null) { - cursorToUse = cursorToUse.sort(getMappedSortObject(query, type)); + DBObject sortDbo = type != null ? getMappedSortObject(query, type) : query.getSortObject(); + cursorToUse = cursorToUse.sort(sortDbo); } if (StringUtils.hasText(query.getHint())) { cursorToUse = cursorToUse.hint(query.getHint()); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java index f1024adc0..e31589ecd 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java @@ -42,6 +42,7 @@ import org.springframework.dao.DataAccessException; import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Version; +import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.MongoDbFactory; import org.springframework.data.mongodb.core.convert.CustomConversions; import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver; @@ -50,11 +51,13 @@ import org.springframework.data.mongodb.core.convert.QueryMapper; import org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexCreator; import org.springframework.data.mongodb.core.mapping.MongoMappingContext; import org.springframework.data.mongodb.core.query.BasicQuery; +import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; import org.springframework.test.util.ReflectionTestUtils; import com.mongodb.BasicDBObject; +import com.mongodb.BasicDBObjectBuilder; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBCursor; @@ -329,6 +332,26 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { verify(collection, never()).remove(Mockito.any(DBObject.class)); } + /** + * @see DATAMONGO-948 + */ + @Test + public void sortShouldBeTakenAsIsWhenExecutingQueryWithoutSpecificTypeInformation() { + + Query query = Query.query(Criteria.where("foo").is("bar")).with(new Sort("foo")); + template.executeQuery(query, "collection1", new DocumentCallbackHandler() { + + @Override + public void processDocument(DBObject dbObject) throws MongoException, DataAccessException { + // nothing to do - just a test + } + }); + + ArgumentCaptor captor = ArgumentCaptor.forClass(DBObject.class); + verify(cursor, times(1)).sort(captor.capture()); + assertThat(captor.getValue(), equalTo(new BasicDBObjectBuilder().add("foo", 1).get())); + } + class AutogenerateableId { @Id BigInteger id;