diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/PartTreeMongoQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/PartTreeMongoQuery.java index 606d865e0..2dbe49b7d 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/PartTreeMongoQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/PartTreeMongoQuery.java @@ -100,7 +100,7 @@ public class PartTreeMongoQuery extends AbstractMongoQuery { ReturnedType returnedType = processor.withDynamicProjection(accessor).getReturnedType(); - if (returnedType.isProjecting()) { + if (returnedType.needsCustomConstruction()) { Field fields = query.fields(); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/PartTreeMongoQueryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/PartTreeMongoQueryUnitTests.java index 21cfa5c13..341ea8880 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/PartTreeMongoQueryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/PartTreeMongoQueryUnitTests.java @@ -31,6 +31,7 @@ import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.beans.factory.annotation.Value; import org.springframework.data.mongodb.MongoDbFactory; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.convert.DbRefResolver; @@ -172,6 +173,14 @@ public class PartTreeMongoQueryUnitTests { assertThat(query.getFieldsObject().get("firstname"), is((Object) 1)); } + @Test // DATAMONGO-1729 + public void doesNotCreateFieldsObjectForOpenProjection() { + + org.springframework.data.mongodb.core.query.Query query = deriveQueryFromMethod("findAllBy"); + + assertThat(query.getFieldsObject(), is(nullValue())); + } + private org.springframework.data.mongodb.core.query.Query deriveQueryFromMethod(String method, Object... args) { Class[] types = new Class[args.length]; @@ -232,6 +241,8 @@ public class PartTreeMongoQueryUnitTests { @Query(fields = "{ 'firstname' : 1 }") List findBySex(Sex sex); + + OpenProjection findAllBy(); } interface PersonProjection { @@ -256,4 +267,12 @@ public class PartTreeMongoQueryUnitTests { this.lastname = lastname; } } + + interface OpenProjection { + + String getFirstname(); + + @Value("#{target.firstname + ' ' + target.lastname}") + String getFullname(); + } }