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 24e7c9981..c45f2ee50 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 @@ -269,10 +269,10 @@ class MongoQueryCreator extends AbstractQueryCreator { switch (type) { case STARTING_WITH: - source = source + "*"; + source = "^" + source; break; case ENDING_WITH: - source = "*" + source; + source = source + "$"; break; case CONTAINING: source = "*" + source + "*"; 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 2f4a50b0d..937de0227 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 @@ -53,11 +53,9 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) public abstract class AbstractPersonRepositoryIntegrationTests { - @Autowired - protected PersonRepository repository; + @Autowired protected PersonRepository repository; - @Autowired - MongoOperations operations; + @Autowired MongoOperations operations; Person dave, oliver, carter, boyd, stefan, leroi, alicia; QPerson person; @@ -570,4 +568,26 @@ public abstract class AbstractPersonRepositoryIntegrationTests { public void executesAnnotatedCountProjection() { assertThat(repository.someCountQuery("Matthews"), is(2L)); } + + /** + * @see DATAMONGO-701 + */ + @Test + public void executesDerivedStartsWithQueryCorrectly() { + + List result = repository.findByLastnameStartsWith("Matt"); + assertThat(result, hasSize(2)); + assertThat(result, hasItems(dave, oliver)); + } + + /** + * @see DATAMONGO-701 + */ + @Test + public void executesDerivedEndsWithQueryCorrectly() { + + List result = repository.findByLastnameEndsWith("thews"); + assertThat(result, hasSize(2)); + assertThat(result, hasItems(dave, oliver)); + } } 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 68378692e..df79b1b8a 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 @@ -47,6 +47,10 @@ public interface PersonRepository extends MongoRepository, Query */ List findByLastname(String lastname); + List findByLastnameStartsWith(String prefix); + + List findByLastnameEndsWith(String postfix); + /** * Returns all {@link Person}s with the given lastname ordered by their firstname. * 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 0b1ffabe4..e46caee89 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 @@ -263,7 +263,7 @@ public class MongoQueryCreatorUnitTests { MongoQueryCreator creator = new MongoQueryCreator(tree, getAccessor(converter, "Matt"), context); Query query = creator.createQuery(); - assertThat(query, is(query(where("foo").regex("Matt.*")))); + assertThat(query, is(query(where("foo").regex("^Matt")))); } /** @@ -276,7 +276,7 @@ public class MongoQueryCreatorUnitTests { MongoQueryCreator creator = new MongoQueryCreator(tree, getAccessor(converter, "ews"), context); Query query = creator.createQuery(); - assertThat(query, is(query(where("foo").regex(".*ews")))); + assertThat(query, is(query(where("foo").regex("ews$")))); } /**