Browse Source

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.

Original pull request: #363.
pull/663/head
Christoph Strobl 10 years ago committed by Mark Paluch
parent
commit
0aff94b5ce
  1. 2
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java
  2. 12
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java
  3. 11
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java
  4. 3
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryCreatorUnitTests.java

2
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java

@ -201,7 +201,7 @@ class MongoQueryCreator extends AbstractQueryCreator<Query, Criteria> { @@ -201,7 +201,7 @@ class MongoQueryCreator extends AbstractQueryCreator<Query, Criteria> {
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:

12
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java

@ -1211,14 +1211,14 @@ public abstract class AbstractPersonRepositoryIntegrationTests { @@ -1211,14 +1211,14 @@ public abstract class AbstractPersonRepositoryIntegrationTests {
}
/**
* @see DATAMONGO-990
* @see DATAMONGO-1425
*/
@Test
public void shouldFindByFirstnameForSpELExpressionWithParameterVariableOnly() {
List<Person> users = repository.findWithSpelByFirstnameForSpELExpressionWithParameterVariableOnly("Dave");
public void findsPersonsByFirstnameNotContains() throws Exception {
assertThat(users, hasSize(1));
assertThat(users.get(0), is(dave));
List<Person> result = repository.findByFirstnameNotContains("Boyd");
assertThat(result.size(), is((int) (repository.count() - 1)));
assertThat(result, not(hasItem(boyd)));
}
}

11
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java

@ -89,6 +89,8 @@ public interface PersonRepository extends MongoRepository<Person, String>, Query @@ -89,6 +89,8 @@ public interface PersonRepository extends MongoRepository<Person, String>, Query
*/
List<Person> findByFirstnameLike(String firstname);
List<Person> findByFirstnameNotContains(String firstname);
List<Person> findByFirstnameLikeOrderByLastnameAsc(String firstname, Sort sort);
@Query("{'age' : { '$lt' : ?0 } }")
@ -309,7 +311,8 @@ public interface PersonRepository extends MongoRepository<Person, String>, Query @@ -309,7 +311,8 @@ public interface PersonRepository extends MongoRepository<Person, String>, Query
* @see DATAMONGO-745
*/
@Query("{lastname:?0, address.street:{$in:?1}}")
Page<Person> findByCustomQueryLastnameAndAddressStreetInList(String lastname, List<String> streetNames, Pageable page);
Page<Person> findByCustomQueryLastnameAndAddressStreetInList(String lastname, List<String> streetNames,
Pageable page);
/**
* @see DATAMONGO-950
@ -334,19 +337,19 @@ public interface PersonRepository extends MongoRepository<Person, String>, Query @@ -334,19 +337,19 @@ public interface PersonRepository extends MongoRepository<Person, String>, Query
*/
@Query("{ firstname : { $in : ?0 }}")
Stream<Person> findByCustomQueryWithStreamingCursorByFirstnames(List<String> firstnames);
/**
* @see DATAMONGO-990
*/
@Query("{ firstname : ?#{[0]}}")
List<Person> findWithSpelByFirstnameForSpELExpressionWithParameterIndexOnly(String firstname);
/**
* @see DATAMONGO-990
*/
@Query("{ firstname : ?#{[0]}, email: ?#{principal.email} }")
List<Person> findWithSpelByFirstnameAndCurrentUserWithCustomQuery(String firstname);
/**
* @see DATAMONGO-990
*/

3
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryCreatorUnitTests.java

@ -461,6 +461,7 @@ public class MongoQueryCreatorUnitTests { @@ -461,6 +461,7 @@ public class MongoQueryCreatorUnitTests {
/**
* @see DATAMONGO-1075
* @see DATAMONGO-1425
*/
@Test
public void shouldCreateRegexWhenUsingNotContainsOnStringProperty() {
@ -469,7 +470,7 @@ public class MongoQueryCreatorUnitTests { @@ -469,7 +470,7 @@ public class MongoQueryCreatorUnitTests {
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()));
}
/**

Loading…
Cancel
Save