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));
|
||||
}
|
||||
} 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;
|
||||
|
||||
@@ -174,6 +174,10 @@ interface ReactiveMongoQueryExecution {
|
||||
return source;
|
||||
}
|
||||
|
||||
if(!operations.getConverter().getMappingContext().hasPersistentEntityFor(returnedType.getReturnedType())) {
|
||||
return source;
|
||||
}
|
||||
|
||||
Converter<Object, Object> converter = new DtoInstantiatingConverter(returnedType.getReturnedType(),
|
||||
operations.getConverter().getMappingContext(), instantiators);
|
||||
|
||||
|
||||
@@ -1302,4 +1302,11 @@ public abstract class AbstractPersonRepositoryIntegrationTests {
|
||||
// assertThat(target).isNotNull();
|
||||
// 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 }")
|
||||
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();
|
||||
}
|
||||
|
||||
@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> {
|
||||
|
||||
Flux<Person> findByLastname(String lastname);
|
||||
@@ -422,6 +432,9 @@ public class ReactiveMongoRepositoryTests implements BeanClassLoaderAware, BeanF
|
||||
|
||||
@Query(sort = "{ age : -1 }")
|
||||
Flux<Person> findByAgeGreaterThan(int age, Sort sort);
|
||||
|
||||
@Query(value = "{_id:?0}")
|
||||
Mono<org.bson.Document> findDocumentById(String id);
|
||||
}
|
||||
|
||||
interface ReactiveContactRepository extends ReactiveMongoRepository<Contact, String> {}
|
||||
|
||||
Reference in New Issue
Block a user