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 d8689d3a1..64d05fd01 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 @@ -25,6 +25,7 @@ import java.util.regex.Pattern; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + import org.springframework.data.domain.Range; import org.springframework.data.domain.Range.Bound; import org.springframework.data.domain.Sort; @@ -187,7 +188,7 @@ class MongoQueryCreator extends AbstractQueryCreator { case LESS_THAN_EQUAL: return criteria.lte(parameters.next()); case BETWEEN: - return computeBetweenPart(criteria, parameters.next(), parameters); + return computeBetweenPart(criteria, parameters); case IS_NOT_NULL: return criteria.ne(null); case IS_NULL: @@ -420,19 +421,20 @@ class MongoQueryCreator extends AbstractQueryCreator { /** * Compute a {@link Type#BETWEEN} typed {@link Part} using {@link Criteria#gt(Object) $gt}, - * {@link Criteria#gte(Object) $gte}, {@link Criteria#lt(Object) $lt} and {@link Criteria#lte(Object) $lte}.
- * In case the given {@literal value} is actually a {@link Range} the lower and upper bounds of the {@link Range} are + * {@link Criteria#gte(Object) $gte}, {@link Criteria#lt(Object) $lt} and {@link Criteria#lte(Object) $lte}. + *

+ * In case the first {@literal value} is actually a {@link Range} the lower and upper bounds of the {@link Range} are * used according to their {@link Bound#isInclusive() inclusion} definition. Otherwise the {@literal value} is used * for {@literal $gt} and {@link Iterator#next() parameters.next()} as {@literal $lt}. * * @param criteria must not be {@literal null}. - * @param value current value. Must not be {@literal null}. * @param parameters must not be {@literal null}. * @return * @since 2.2 */ - private static Criteria computeBetweenPart(Criteria criteria, Object value, Iterator parameters) { + private static Criteria computeBetweenPart(Criteria criteria, Iterator parameters) { + Object value = parameters.next(); if (!(value instanceof Range)) { return criteria.gt(value).lt(parameters.next()); } diff --git a/src/main/asciidoc/new-features.adoc b/src/main/asciidoc/new-features.adoc index df0ed829d..27b07678e 100644 --- a/src/main/asciidoc/new-features.adoc +++ b/src/main/asciidoc/new-features.adoc @@ -9,6 +9,7 @@ * Extended SpEL aggregation support for MongoDB 3.4 and MongoDB 4.0 operators (see <>). * Template API delete by entity considers the version property in delete queries. * Repository deletes now throw `OptimisticLockingFailureException` when a versioned entity cannot be deleted. +* Support `Range` in repository between queries. [[new-features.2-1-0]] == What's New in Spring Data MongoDB 2.1