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 4c1da7bd9..19f67df94 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 @@ -98,7 +98,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 9e578c9df..d28e355f9 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 @@ -30,6 +30,7 @@ import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.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; @@ -206,6 +207,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]; @@ -266,6 +275,8 @@ public class PartTreeMongoQueryUnitTests { @Query(fields = "{ 'firstname' : 1 }") List findBySex(Sex sex); + + OpenProjection findAllBy(); } interface PersonProjection { @@ -290,4 +301,12 @@ public class PartTreeMongoQueryUnitTests { this.lastname = lastname; } } + + interface OpenProjection { + + String getFirstname(); + + @Value("#{target.firstname + ' ' + target.lastname}") + String getFullname(); + } }