Browse Source

Polishing.

Reformat code. Make getAnnotatedHint non-nullable.

See #3230
Original pull request: #4339
pull/4373/head
Mark Paluch 3 years ago
parent
commit
89c6099a3c
No known key found for this signature in database
GPG Key ID: 4406B84C1661DCD1
  1. 8
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/Hint.java
  2. 1
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractMongoQuery.java
  3. 1
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractReactiveMongoQuery.java
  4. 1
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AggregationUtils.java
  5. 11
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryMethod.java
  6. 3
      src/main/asciidoc/reference/mongo-repositories.adoc

8
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/Hint.java

@ -35,11 +35,17 @@ import org.springframework.core.annotation.AliasFor;
@Documented @Documented
public @interface Hint { public @interface Hint {
/**
* The name of the index to use. In case of an {@literal aggregation} the index is evaluated against the initial
* collection or view.
*
* @return the index name.
*/
String value() default ""; String value() default "";
/** /**
* The name of the index to use. In case of an {@literal aggregation} the index is evaluated against the initial * The name of the index to use. In case of an {@literal aggregation} the index is evaluated against the initial
* collection or view. Specify the index either by the index name. * collection or view.
* *
* @return the index name. * @return the index name.
*/ */

1
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractMongoQuery.java

@ -238,6 +238,7 @@ public abstract class AbstractMongoQuery implements RepositoryQuery {
if (!method.hasAnnotatedHint()) { if (!method.hasAnnotatedHint()) {
return query; return query;
} }
return query.withHint(method.getAnnotatedHint()); return query.withHint(method.getAnnotatedHint());
} }

1
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractReactiveMongoQuery.java

@ -282,6 +282,7 @@ public abstract class AbstractReactiveMongoQuery implements RepositoryQuery {
if (!method.hasAnnotatedHint()) { if (!method.hasAnnotatedHint()) {
return query; return query;
} }
return query.withHint(method.getAnnotatedHint()); return query.withHint(method.getAnnotatedHint());
} }

1
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AggregationUtils.java

@ -114,6 +114,7 @@ abstract class AggregationUtils {
if (!queryMethod.hasAnnotatedHint()) { if (!queryMethod.hasAnnotatedHint()) {
return builder; return builder;
} }
return builder.hint(queryMethod.getAnnotatedHint()); return builder.hint(queryMethod.getAnnotatedHint());
} }

11
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryMethod.java

@ -368,20 +368,19 @@ public class MongoQueryMethod extends QueryMethod {
* @since 4.1 * @since 4.1
*/ */
public boolean hasAnnotatedHint() { public boolean hasAnnotatedHint() {
return StringUtils.hasText(getAnnotatedHint()); return doFindAnnotation(Hint.class).map(Hint::indexName).filter(StringUtils::hasText).isPresent();
} }
/** /**
* Returns the aggregation pipeline declared via a {@link Hint} annotation. * Returns the aggregation pipeline declared via a {@link Hint} annotation.
* *
* @return the index name (might be empty) or {@literal null} if not present. * @return the index name (might be empty).
* @throws IllegalStateException if the method is not annotated with {@link Hint}
* @since 4.1 * @since 4.1
*/ */
@Nullable
public String getAnnotatedHint() { public String getAnnotatedHint() {
return doFindAnnotation(Hint.class).map(Hint::indexName).orElseThrow(() -> new IllegalStateException(
Optional<Hint> hint = doFindAnnotation(Hint.class); "Expected to find @Hint annotation but did not; Make sure to check hasAnnotatedHint() before."));
return hint.map(Hint::indexName).orElse(null);
} }
private Optional<String[]> findAnnotatedAggregation() { private Optional<String[]> findAnnotatedAggregation() {

3
src/main/asciidoc/reference/mongo-repositories.adoc

@ -312,8 +312,9 @@ List<Person> findByLastname(String lastname);
@Query(value = "{ 'firstname' : ?0 }", hint = "firstname-idx") <2> @Query(value = "{ 'firstname' : ?0 }", hint = "firstname-idx") <2>
List<Person> findByFirstname(String firstname); List<Person> findByFirstname(String firstname);
---- ----
<1> Use the index with name `lastname-idx`. <1> Use the index with name `lastname-idx`.
<2> The `@Query` annotation defines the `hint` alias which is equivalent to explicitly adding the `@Hint` annotation. <2> The `@Query` annotation defines the `hint` alias which is equivalent to adding the `@Hint` annotation.
==== ====
[[mongodb.repositories.queries.update]] [[mongodb.repositories.queries.update]]

Loading…
Cancel
Save