diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/StringBasedMongoQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/StringBasedMongoQuery.java index b744c9e80..12b6b13ea 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/StringBasedMongoQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/StringBasedMongoQuery.java @@ -72,7 +72,7 @@ public class StringBasedMongoQuery extends AbstractMongoQuery { } if (LOG.isDebugEnabled()) { - LOG.debug(String.format("Created query {}", query.getQueryObject())); + LOG.debug(String.format("Created query %s", query.getQueryObject())); } return query; @@ -86,7 +86,7 @@ public class StringBasedMongoQuery extends AbstractMongoQuery { while (matcher.find()) { String group = matcher.group(); int index = Integer.parseInt(matcher.group(1)); - result = input.replace(group, getParameterWithIndex(accessor, index)); + result = result.replace(group, getParameterWithIndex(accessor, index)); } return result; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/StringBasedMongoQueryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/StringBasedMongoQueryUnitTests.java index e701686f2..365865a23 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/StringBasedMongoQueryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/StringBasedMongoQueryUnitTests.java @@ -92,6 +92,26 @@ public class StringBasedMongoQueryUnitTests { assertThat(query.getQueryObject(), is(reference.getQueryObject())); } + @Test + public void bindsMultipleParametersCorrectly() throws SecurityException, NoSuchMethodException { + + Method method = SampleRepository.class.getMethod("findByLastnameAndAddress", String.class, Address.class); + MongoQueryMethod queryMethod = new MongoQueryMethod(method, metadata, creator); + StringBasedMongoQuery mongoQuery = new StringBasedMongoQuery(queryMethod, template); + + Address address = new Address("Foo", "0123", "Bar"); + ConvertingParameterAccessor accesor = StubParameterAccessor.getAccessor(converter, "Matthews", address); + + DBObject addressDbObject = new BasicDBObject(); + converter.write(address, addressDbObject); + + DBObject reference = new BasicDBObject("address", addressDbObject); + reference.put("lastname", "Matthews"); + + org.springframework.data.document.mongodb.query.Query query = mongoQuery.createQuery(accesor); + assertThat(query.getQueryObject(), is(reference)); + } + private interface SampleRepository { @Query("{ 'lastname' : ?0 }") @@ -99,5 +119,8 @@ public class StringBasedMongoQueryUnitTests { @Query("{ 'address' : ?0 }") Person findByAddress(Address address); + + @Query("{ 'lastname' : ?0, 'address' : ?1 }") + Person findByLastnameAndAddress(String lastname, Address address); } }