diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java index 7f8ec91fe..496e292a3 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java @@ -124,7 +124,12 @@ public class Criteria implements CriteriaDefinition { } /** - * Static factory method to create a {@link Criteria} matching an example object. + * Static factory method to create a {@link Criteria} matching an example object.
+ * By default the {@link Example} uses typed matching restricting it to probe assignable types. For example, when + * sticking with the default type key ({@code _class}), the query has restrictions such as + * _class : { $in : [com.acme.Person] } .
+ * To avoid the above mentioned type restriction use an {@link UntypedExampleMatcher} with + * {@link Example#of(Object, org.springframework.data.domain.ExampleMatcher)}. * * @param example must not be {@literal null}. * @return new instance of {@link Criteria}. diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/MongoRepository.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/MongoRepository.java index 144bb23af..24e87121e 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/MongoRepository.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/MongoRepository.java @@ -78,16 +78,31 @@ public interface MongoRepository extends PagingAndSortingRepository List insert(Iterable entities); - /* - * (non-Javadoc) + /** + * Returns all entities matching the given {@link Example}. In case no match could be found an empty {@link List} is + * returned.
+ * By default the {@link Example} uses typed matching restricting it to probe assignable types. For example, when + * sticking with the default type key ({@code _class}), the query has restrictions such as + * _class : { $in : [com.acme.Person] }.
+ * To avoid the above mentioned type restriction use an {@link org.springframework.data.mongodb.core.query.UntypedExampleMatcher} with + * {@link Example#of(Object, org.springframework.data.domain.ExampleMatcher)}. + * * @see org.springframework.data.repository.query.QueryByExampleExecutor#findAll(org.springframework.data.domain.Example) */ @Override List findAll(Example example); - /* - * (non-Javadoc) - * @see org.springframework.data.repository.query.QueryByExampleExecutor#findAll(org.springframework.data.domain.Example, org.springframework.data.domain.Sort) + /** + * Returns all entities matching the given {@link Example} applying the given {@link Sort}. In case no match could be + * found an empty {@link List} is returned.
+ * By default the {@link Example} uses typed matching restricting it to probe assignable types. For example, when + * sticking with the default type key ({@code _class}), the query has restrictions such as + * _class : { $in : [com.acme.Person] }.
+ * To avoid the above mentioned type restriction use an {@link org.springframework.data.mongodb.core.query.UntypedExampleMatcher} with + * {@link Example#of(Object, org.springframework.data.domain.ExampleMatcher)}. + * + * @see org.springframework.data.repository.query.QueryByExampleExecutor#findAll(org.springframework.data.domain.Example, + * org.springframework.data.domain.Sort) */ @Override List findAll(Example example, Sort sort); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/ReactiveMongoRepository.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/ReactiveMongoRepository.java index 8ea253f60..a9c62a50a 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/ReactiveMongoRepository.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/ReactiveMongoRepository.java @@ -64,16 +64,33 @@ public interface ReactiveMongoRepository extends ReactiveSortingRepositor */ Flux insert(Publisher entities); - /* - * (non-Javadoc) - * @see org.springframework.data.repository.query.QueryByExampleExecutor#findAll(org.springframework.data.domain.Example) + /** + * Returns all entities matching the given {@link Example}. In case no match could be found an empty {@link Flux} is + * returned.
+ * By default the {@link Example} uses typed matching restricting it to probe assignable types. For example, when + * sticking with the default type key ({@code _class}), the query has restrictions such as + * _class : { $in : [com.acme.Person] }.
+ * To avoid the above mentioned type restriction use an {@link org.springframework.data.mongodb.core.query.UntypedExampleMatcher} with + * {@link Example#of(Object, org.springframework.data.domain.ExampleMatcher)}. + * + * @see org.springframework.data.repository.query.ReactiveQueryByExampleExecutor#findAll(org.springframework.data.domain.Example) */ + @Override Flux findAll(Example example); - /* - * (non-Javadoc) - * @see org.springframework.data.repository.query.QueryByExampleExecutor#findAll(org.springframework.data.domain.Example, org.springframework.data.domain.Sort) + /** + * Returns all entities matching the given {@link Example} applying the given {@link Sort}. In case no match could be + * found an empty {@link Flux} is returned.
+ * By default the {@link Example} uses typed matching restricting it to probe assignable types. For example, when + * sticking with the default type key ({@code _class}), the query has restrictions such as + * _class : { $in : [com.acme.Person] }.
+ * To avoid the above mentioned type restriction use an {@link org.springframework.data.mongodb.core.query.UntypedExampleMatcher} with + * {@link Example#of(Object, org.springframework.data.domain.ExampleMatcher)}. + * + * @see org.springframework.data.repository.query.ReactiveQueryByExampleExecutor#findAll(org.springframework.data.domain.Example, + * org.springframework.data.domain.Sort) */ + @Override Flux findAll(Example example, Sort sort); } diff --git a/src/main/asciidoc/reference/query-by-example.adoc b/src/main/asciidoc/reference/query-by-example.adoc index d1f5ce5aa..342ade291 100644 --- a/src/main/asciidoc/reference/query-by-example.adoc +++ b/src/main/asciidoc/reference/query-by-example.adoc @@ -97,3 +97,10 @@ Query query = new Query(new Criteria().alike(example)); List result = template.find(query, Person.class); ---- ==== + +[NOTE] +==== +`UntypedExampleMatcher` is likely the right choice for you if you are storing different entities within a single collection or opted out of writing <>. + +Also, keep in mind that using `@TypeAlias` requires eager initialization of the `MappingContext`. To do so, configure `initialEntitySet` to to ensure proper alias resolution for read operations. +====