From 112981fd7d44ed2417132e8e3b3ee45cc12d6185 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Tue, 26 Apr 2016 09:42:51 +0200 Subject: [PATCH 1/2] DATAMONGO-1425 - NOT_CONTAINS keyword issues CONTAINS query. Prepare issue branch. --- pom.xml | 2 +- spring-data-mongodb-cross-store/pom.xml | 4 ++-- spring-data-mongodb-distribution/pom.xml | 2 +- spring-data-mongodb-log4j/pom.xml | 2 +- spring-data-mongodb/pom.xml | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 3a9b4f5ad7..56cd13245a 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATAMONGO-1425-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-cross-store/pom.xml b/spring-data-mongodb-cross-store/pom.xml index 6554045e11..f60fa32de6 100644 --- a/spring-data-mongodb-cross-store/pom.xml +++ b/spring-data-mongodb-cross-store/pom.xml @@ -6,7 +6,7 @@ org.springframework.data spring-data-mongodb-parent - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATAMONGO-1425-SNAPSHOT ../pom.xml @@ -48,7 +48,7 @@ org.springframework.data spring-data-mongodb - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATAMONGO-1425-SNAPSHOT diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index 2d02722262..a1e3895f6e 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -13,7 +13,7 @@ org.springframework.data spring-data-mongodb-parent - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATAMONGO-1425-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-log4j/pom.xml b/spring-data-mongodb-log4j/pom.xml index ee5e3336db..ee6fc77505 100644 --- a/spring-data-mongodb-log4j/pom.xml +++ b/spring-data-mongodb-log4j/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATAMONGO-1425-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index edfa519fad..fca21e8a30 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -11,7 +11,7 @@ org.springframework.data spring-data-mongodb-parent - 1.10.0.BUILD-SNAPSHOT + 1.10.0.DATAMONGO-1425-SNAPSHOT ../pom.xml From ada9edb4aef626b6e1c9ad79e23a0d3dcc5a834b Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Tue, 26 Apr 2016 19:33:15 +0200 Subject: [PATCH 2/2] DATAMONGO-1425 - Fix query derivation for notContaining on String properties. We now correctly build up the criteria for derived queries using notContaining keyword on String properties. --- .../mongodb/repository/query/MongoQueryCreator.java | 2 +- .../AbstractPersonRepositoryIntegrationTests.java | 11 +++++++++++ .../data/mongodb/repository/PersonRepository.java | 11 +++++++---- .../repository/query/MongoQueryCreatorUnitTests.java | 3 ++- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java index 083b778d7e..315ac7a805 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java @@ -200,7 +200,7 @@ private Criteria from(Part part, MongoPersistentProperty property, Criteria crit case CONTAINING: return createContainingCriteria(part, property, criteria, parameters); case NOT_CONTAINING: - return createContainingCriteria(part, property, criteria, parameters).not(); + return createContainingCriteria(part, property, criteria.not(), parameters); case REGEX: return criteria.regex(parameters.next().toString()); case EXISTS: diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java index b924d81883..277172f12e 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java @@ -1261,4 +1261,15 @@ public void findAllByExampleShouldResolveStuffCorrectly() { assertThat(result.size(), is(2)); } + /** + * @see DATAMONGO-1425 + */ + @Test + public void findsPersonsByFirstnameNotContains() throws Exception { + + List result = repository.findByFirstnameNotContains("Boyd"); + assertThat(result.size(), is((int) (repository.count() - 1))); + assertThat(result, not(hasItem(boyd))); + } + } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java index eae2c02e10..00a91b4e45 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java @@ -89,6 +89,8 @@ public interface PersonRepository extends MongoRepository, Query */ List findByFirstnameLike(String firstname); + List findByFirstnameNotContains(String firstname); + List findByFirstnameLikeOrderByLastnameAsc(String firstname, Sort sort); @Query("{'age' : { '$lt' : ?0 } }") @@ -309,7 +311,8 @@ public interface PersonRepository extends MongoRepository, Query * @see DATAMONGO-745 */ @Query("{lastname:?0, address.street:{$in:?1}}") - Page findByCustomQueryLastnameAndAddressStreetInList(String lastname, List streetNames, Pageable page); + Page findByCustomQueryLastnameAndAddressStreetInList(String lastname, List streetNames, + Pageable page); /** * @see DATAMONGO-950 @@ -334,19 +337,19 @@ public interface PersonRepository extends MongoRepository, Query */ @Query("{ firstname : { $in : ?0 }}") Stream findByCustomQueryWithStreamingCursorByFirstnames(List firstnames); - + /** * @see DATAMONGO-990 */ @Query("{ firstname : ?#{[0]}}") List findWithSpelByFirstnameForSpELExpressionWithParameterIndexOnly(String firstname); - + /** * @see DATAMONGO-990 */ @Query("{ firstname : ?#{[0]}, email: ?#{principal.email} }") List findWithSpelByFirstnameAndCurrentUserWithCustomQuery(String firstname); - + /** * @see DATAMONGO-990 */ diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryCreatorUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryCreatorUnitTests.java index 9780f32be9..2fe220b73e 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryCreatorUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryCreatorUnitTests.java @@ -454,6 +454,7 @@ public void shouldCreateInClauseWhenUsingNotContainsOnCollectionLikeProperty() { /** * @see DATAMONGO-1075 + * @see DATAMONGO-1425 */ @Test public void shouldCreateRegexWhenUsingNotContainsOnStringProperty() { @@ -462,7 +463,7 @@ public void shouldCreateRegexWhenUsingNotContainsOnStringProperty() { MongoQueryCreator creator = new MongoQueryCreator(tree, getAccessor(converter, "thew"), context); Query query = creator.createQuery(); - assertThat(query, is(query(where("username").regex(".*thew.*").not()))); + assertThat(query.getQueryObject(), is(query(where("username").not().regex(".*thew.*")).getQueryObject())); } /**