diff --git a/pom.xml b/pom.xml
index d7cf78de79..64b7e135e6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.3.3-SNAPSHOT
+ 4.3.x-GH-4758-SNAPSHOT
pom
Spring Data MongoDB
diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml
index 76dff60b0d..e3e9427af8 100644
--- a/spring-data-mongodb-benchmarks/pom.xml
+++ b/spring-data-mongodb-benchmarks/pom.xml
@@ -7,7 +7,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.3.3-SNAPSHOT
+ 4.3.x-GH-4758-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml
index 21d97b7213..589a81a8a4 100644
--- a/spring-data-mongodb-distribution/pom.xml
+++ b/spring-data-mongodb-distribution/pom.xml
@@ -15,7 +15,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.3.3-SNAPSHOT
+ 4.3.x-GH-4758-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index 9594370085..820a23a869 100644
--- a/spring-data-mongodb/pom.xml
+++ b/spring-data-mongodb/pom.xml
@@ -13,7 +13,7 @@
org.springframework.data
spring-data-mongodb-parent
- 4.3.3-SNAPSHOT
+ 4.3.x-GH-4758-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/QueryUtils.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/QueryUtils.java
index c7cb84d091..c2542efa44 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/QueryUtils.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/QueryUtils.java
@@ -23,6 +23,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.bson.Document;
+
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.data.mongodb.core.query.Collation;
import org.springframework.data.mongodb.core.query.Query;
@@ -116,13 +117,13 @@ static int indexOfAssignableParameter(Class> type, Class>[] parameters) {
*/
static int indexOfAssignableParameter(Class> type, List> parameters) {
- if(parameters.isEmpty()) {
+ if (parameters.isEmpty()) {
return -1;
}
int i = 0;
- for(Class> parameterType : parameters) {
- if(ClassUtils.isAssignable(type, parameterType)) {
+ for (Class> parameterType : parameters) {
+ if (ClassUtils.isAssignable(type, parameterType)) {
return i;
}
i++;
@@ -151,6 +152,12 @@ public DefaultSortingInterceptor(Document defaultSort) {
@Override
public Object invoke(@NonNull MethodInvocation invocation) throws Throwable {
+ if (invocation.getMethod().getName().equals("isSorted")) {
+
+ boolean result = (Boolean) invocation.proceed();
+ return result || !defaultSort.isEmpty();
+ }
+
if (!invocation.getMethod().getName().equals("getSortObject")) {
return invocation.proceed();
}
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java
index c35a328a1f..5ddf4534dd 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java
@@ -37,12 +37,15 @@
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
import org.springframework.data.domain.Limit;
+import org.springframework.data.domain.OffsetScrollPosition;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.ScrollPosition;
import org.springframework.data.domain.Slice;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
+import org.springframework.data.domain.Window;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.ExecutableFindOperation.ExecutableFind;
import org.springframework.data.mongodb.core.ExecutableFindOperation.FindWithQuery;
@@ -329,6 +332,20 @@ void usesAnnotatedSortWhenPresent() {
assertThat(captor.getValue().getSortObject()).isEqualTo(new Document("age", 1));
}
+ @Test // GH-4758
+ void scrollUsesAnnotatedSortWhenPresent() {
+
+ createQueryForMethod("scrollByAge", Integer.class, ScrollPosition.class) //
+ .execute(new Object[] { 1000, ScrollPosition.keyset()});
+
+ ArgumentCaptor captor = ArgumentCaptor.forClass(Query.class);
+ verify(withQueryMock).matching(captor.capture());
+
+ Query query = captor.getValue();
+ assertThat(query.getSortObject()).isEqualTo(new Document("age", 1));
+ assertThat(query.isSorted()).isTrue();
+ }
+
@Test // DATAMONGO-1979
void usesExplicitSortOverridesAnnotatedSortWhenPresent() {
@@ -637,6 +654,9 @@ private interface Repo extends MongoRepository {
@org.springframework.data.mongodb.repository.Query(sort = "{ age : 1 }")
List findByAge(Integer age);
+ @org.springframework.data.mongodb.repository.Query(sort = "{ age : 1 }")
+ Window scrollByAge(Integer age, ScrollPosition position);
+
@org.springframework.data.mongodb.repository.Query(sort = "{ age : 1 }")
List findByAge(Integer age, Sort page);
@@ -670,6 +690,7 @@ private interface Repo extends MongoRepository {
@ReadPreference(value = "secondaryPreferred")
List findWithReadPreferenceByFirstname(String firstname);
+
}
// DATAMONGO-1872