diff --git a/pom.xml b/pom.xml index 10c1adf1bf..96e5f17a6e 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 3.2.0-SNAPSHOT + 3.2.0-GH-3544-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml index f0fbb601c8..ad378d87ba 100644 --- a/spring-data-mongodb-benchmarks/pom.xml +++ b/spring-data-mongodb-benchmarks/pom.xml @@ -7,7 +7,7 @@ org.springframework.data spring-data-mongodb-parent - 3.2.0-SNAPSHOT + 3.2.0-GH-3544-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index 1a17321782..6d2d2697e3 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -14,7 +14,7 @@ org.springframework.data spring-data-mongodb-parent - 3.2.0-SNAPSHOT + 3.2.0-GH-3544-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index 0248517caf..ab51e729eb 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -11,7 +11,7 @@ org.springframework.data spring-data-mongodb-parent - 3.2.0-SNAPSHOT + 3.2.0-GH-3544-SNAPSHOT ../pom.xml 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 496e292a3f..cc99ad69d7 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 @@ -620,8 +620,15 @@ public Criteria elemMatch(Criteria criteria) { */ public Criteria alike(Example sample) { - criteria.put("$example", sample); - return this; + if (StringUtils.hasText(this.getKey())) { + + criteria.put("$example", sample); + return this; + } + + Criteria exampleCriteria = new Criteria(); + exampleCriteria.criteria.put("$example", sample); + return registerCriteriaChainElement(exampleCriteria); } /** diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/QueryByExampleTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/QueryByExampleTests.java index d817cef02d..d69d9de542 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/QueryByExampleTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/QueryByExampleTests.java @@ -139,16 +139,14 @@ public void findByExampleShouldReturnEverythingWhenSampleIsEmpty() { assertThat(result).containsExactlyInAnyOrder(p1, p2, p3); } - @Test // DATAMONGO-1245 + @Test // DATAMONGO-1245, GH-3544 public void findByExampleWithCriteria() { Person sample = new Person(); sample.lastname = "stark"; - Query query = new Query(new Criteria().alike(Example.of(sample)).and("firstname").regex("^ary*")); - - List result = operations.find(query, Person.class); - assertThat(result).hasSize(1); + Query query = new Query(new Criteria().alike(Example.of(sample)).and("firstname").regex(".*n.*")); + assertThat(operations.find(query, Person.class)).containsExactly(p1); } @Test // DATAMONGO-1459 diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java index 7d1dbbf546..162693cd6b 100755 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java @@ -771,6 +771,19 @@ void exampleShouldBeMappedCorrectlyWhenContainingLegacyPoint() { assertThat(document).containsEntry("legacyPoint.y", 20D); } + @Test // GH-3544 + void exampleWithCombinedCriteriaShouldBeMappedCorrectly() { + + Foo probe = new Foo(); + probe.embedded = new EmbeddedClass(); + probe.embedded.id = "conflux"; + + Query query = query(byExample(probe).and("listOfItems").exists(true)); + org.bson.Document document = mapper.getMappedObject(query.getQueryObject(), context.getPersistentEntity(Foo.class)); + + assertThat(document).containsEntry("embedded\\._id", "conflux").containsEntry("my_items", new org.bson.Document("$exists", true)); + } + @Test // DATAMONGO-1988 void mapsStringObjectIdRepresentationToObjectIdWhenReferencingIdProperty() {