DATAMONGO-2374 - Fix simple type result handling for repository query methods.
Original pull request: #791.
This commit is contained in:
committed by
Mark Paluch
parent
686cdac73f
commit
bc29f2b24e
@@ -66,8 +66,12 @@ class PropertyOperations {
|
|||||||
projectionInformation.getInputProperties().forEach(it -> projectedFields.append(it.getName(), 1));
|
projectionInformation.getInputProperties().forEach(it -> projectedFields.append(it.getName(), 1));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
mappingContext.getRequiredPersistentEntity(targetType).doWithProperties(
|
|
||||||
(SimplePropertyHandler) persistentProperty -> projectedFields.append(persistentProperty.getName(), 1));
|
MongoPersistentEntity<?> entity = mappingContext.getPersistentEntity(targetType);
|
||||||
|
if(entity != null) {
|
||||||
|
entity.doWithProperties(
|
||||||
|
(SimplePropertyHandler) persistentProperty -> projectedFields.append(persistentProperty.getName(), 1));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return projectedFields;
|
return projectedFields;
|
||||||
|
|||||||
@@ -174,6 +174,10 @@ interface ReactiveMongoQueryExecution {
|
|||||||
return source;
|
return source;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!operations.getConverter().getMappingContext().hasPersistentEntityFor(returnedType.getReturnedType())) {
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
|
||||||
Converter<Object, Object> converter = new DtoInstantiatingConverter(returnedType.getReturnedType(),
|
Converter<Object, Object> converter = new DtoInstantiatingConverter(returnedType.getReturnedType(),
|
||||||
operations.getConverter().getMappingContext(), instantiators);
|
operations.getConverter().getMappingContext(), instantiators);
|
||||||
|
|
||||||
|
|||||||
@@ -1302,4 +1302,11 @@ public abstract class AbstractPersonRepositoryIntegrationTests {
|
|||||||
// assertThat(target).isNotNull();
|
// assertThat(target).isNotNull();
|
||||||
// assertThat(target.getShippingAddresses()).hasSize(1);
|
// assertThat(target.getShippingAddresses()).hasSize(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test // DATAMONGO-2374
|
||||||
|
public void findsWithNativeProjection() {
|
||||||
|
|
||||||
|
assertThat(repository.findDocumentById(dave.getId()).get()).containsEntry("firstname", dave.getFirstname())
|
||||||
|
.containsEntry("lastname", dave.getLastname());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -362,4 +362,7 @@ public interface PersonRepository extends MongoRepository<Person, String>, Query
|
|||||||
|
|
||||||
@Query(value = "{ 'shippingAddresses' : { '$elemMatch' : { 'city' : { '$eq' : 'lnz' } } } }", fields = "{ 'shippingAddresses.$': ?0 }")
|
@Query(value = "{ 'shippingAddresses' : { '$elemMatch' : { 'city' : { '$eq' : 'lnz' } } } }", fields = "{ 'shippingAddresses.$': ?0 }")
|
||||||
Person findWithArrayPositionInProjection(int position);
|
Person findWithArrayPositionInProjection(int position);
|
||||||
|
|
||||||
|
@Query(value="{_id:?0}")
|
||||||
|
Optional<org.bson.Document> findDocumentById(String id);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -384,6 +384,16 @@ public class ReactiveMongoRepositoryTests implements BeanClassLoaderAware, BeanF
|
|||||||
.verifyComplete();
|
.verifyComplete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test // DATAMONGO-2374
|
||||||
|
public void findsWithNativeProjection() {
|
||||||
|
|
||||||
|
repository.findDocumentById(dave.getId()) //
|
||||||
|
.as(StepVerifier::create) //
|
||||||
|
.consumeNextWith(it -> {
|
||||||
|
assertThat(it).containsEntry("firstname", dave.getFirstname()).containsEntry("lastname", dave.getLastname());
|
||||||
|
}).verifyComplete();
|
||||||
|
}
|
||||||
|
|
||||||
interface ReactivePersonRepository extends ReactiveMongoRepository<Person, String> {
|
interface ReactivePersonRepository extends ReactiveMongoRepository<Person, String> {
|
||||||
|
|
||||||
Flux<Person> findByLastname(String lastname);
|
Flux<Person> findByLastname(String lastname);
|
||||||
@@ -422,6 +432,9 @@ public class ReactiveMongoRepositoryTests implements BeanClassLoaderAware, BeanF
|
|||||||
|
|
||||||
@Query(sort = "{ age : -1 }")
|
@Query(sort = "{ age : -1 }")
|
||||||
Flux<Person> findByAgeGreaterThan(int age, Sort sort);
|
Flux<Person> findByAgeGreaterThan(int age, Sort sort);
|
||||||
|
|
||||||
|
@Query(value = "{_id:?0}")
|
||||||
|
Mono<org.bson.Document> findDocumentById(String id);
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ReactiveContactRepository extends ReactiveMongoRepository<Contact, String> {}
|
interface ReactiveContactRepository extends ReactiveMongoRepository<Contact, String> {}
|
||||||
|
|||||||
Reference in New Issue
Block a user