From c4dcc7d0f59c506d3f439be2a481b16fea17c8e9 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Wed, 19 Feb 2020 10:46:16 +0100 Subject: [PATCH] DATAMONGO-2478 - Fix NPE in Query.of when given a proxied source. Original pull request: #836. --- .../data/mongodb/core/query/Query.java | 12 +++++------- .../data/mongodb/core/query/QueryTests.java | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Query.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Query.java index 6172a4198..32a08431d 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Query.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Query.java @@ -517,13 +517,11 @@ public class Query { } }; - target.criteria.putAll(source.criteria); - target.skip = source.skip; - target.limit = source.limit; - target.sort = Sort.unsorted().and(source.sort); - target.hint = source.hint; - target.collation = source.collation; - target.restrictedTypes.addAll(source.restrictedTypes); + target.skip = source.getSkip(); + target.limit = source.getLimit(); + target.hint = source.getHint(); + target.collation = source.getCollation(); + target.restrictedTypes.addAll(source.getRestrictedTypes()); if (source.getMeta().hasValues()) { target.setMeta(new Meta(source.getMeta())); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/QueryTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/QueryTests.java index b894ee9b2..bfe80bde0 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/QueryTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/QueryTests.java @@ -21,7 +21,7 @@ import static org.springframework.data.mongodb.core.query.Query.*; import org.bson.Document; import org.junit.Test; - +import org.springframework.aop.framework.ProxyFactory; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.domain.Sort.Order; @@ -337,6 +337,19 @@ public class QueryTests { .isNotEqualTo(source.getQueryObject()); } + @Test // DATAMONGO-2478 + public void queryOfShouldWorkOnProxiedObjects() { + + BasicQuery source = new BasicQuery("{ 'foo' : 'bar'}", "{ '_id' : -1, 'foo' : 1 }"); + source.withHint("the hint"); + source.limit(10); + source.setSortObject(new Document("_id", 1)); + + Query target = Query.of((Query) new ProxyFactory(source).getProxy()); + + compareQueries(target, source); + } + private void compareQueries(Query actual, Query expected) { assertThat(actual.getCollation()).isEqualTo(expected.getCollation());