Skip to content

Commit 0e83ab6

Browse files
mp911deschauder
authored andcommitted
Allow Meta annotation usage for derived queries.
We now allow applying Meta to derived queries without turning a derived query method into a annotated one. Original pull request #4854 Closes #4852
1 parent 620e091 commit 0e83ab6

File tree

3 files changed

+13
-8
lines changed

3 files changed

+13
-8
lines changed

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,8 @@
2121
import java.lang.annotation.RetentionPolicy;
2222
import java.lang.annotation.Target;
2323

24-
import org.springframework.data.annotation.QueryAnnotation;
25-
2624
/**
2725
* Annotation to declare meta-information (execution time, cursor size, disk usage) for query methods.
28-
* <p>
29-
* Annotating a repository method with this annotation forces the method to be implemented as query method (i.e. using
30-
* this annotation on an overridden method from a base interface or fragment interface), similar to using
31-
* {@link Query @Query}.
3226
*
3327
* @author Christoph Strobl
3428
* @author Mark Paluch
@@ -37,7 +31,6 @@
3731
@Retention(RetentionPolicy.RUNTIME)
3832
@Target({ ElementType.METHOD, ElementType.ANNOTATION_TYPE })
3933
@Documented
40-
@QueryAnnotation
4134
public @interface Meta {
4235

4336
/**

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public interface PersonRepository extends MongoRepository<Person, String>, Query
6262
* @param lastname
6363
* @return
6464
*/
65+
@Meta
6566
List<Person> findByLastname(String lastname);
6667

6768
List<Person> findByLastnameStartsWith(String prefix);

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.springframework.data.mongodb.core.convert.NoOpDbRefResolver;
3939
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
4040
import org.springframework.data.mongodb.core.query.TextCriteria;
41+
import org.springframework.data.mongodb.repository.Meta;
4142
import org.springframework.data.mongodb.repository.MongoRepository;
4243
import org.springframework.data.mongodb.repository.Person;
4344
import org.springframework.data.mongodb.repository.Person.Sex;
@@ -128,6 +129,12 @@ void doesNotDeriveFieldSpecForNormalDomainType() {
128129
assertThat(deriveQueryFromMethod("findPersonBy", new Object[0]).getFieldsObject()).isEmpty();
129130
}
130131

132+
@Test // GH-4852
133+
void appliesMetaToPartTreeQuery() {
134+
assertThat(deriveQueryFromMethod("findPersonBy", new Object[0]).getMeta()
135+
.getMaxTimeMsec()).isEqualTo(1234L);
136+
}
137+
131138
@Test // DATAMONGO-1345
132139
void restrictsQueryToFieldsRequiredForProjection() {
133140

@@ -194,7 +201,10 @@ private org.springframework.data.mongodb.core.query.Query deriveQueryFromMethod(
194201
PartTreeMongoQuery partTreeQuery = createQueryForMethod(method, types);
195202

196203
MongoParameterAccessor accessor = new MongoParametersParameterAccessor(partTreeQuery.getQueryMethod(), args);
197-
return partTreeQuery.createQuery(new ConvertingParameterAccessor(mongoOperationsMock.getConverter(), accessor));
204+
205+
org.springframework.data.mongodb.core.query.Query query = partTreeQuery.createQuery(new ConvertingParameterAccessor(mongoOperationsMock.getConverter(), accessor));
206+
partTreeQuery.applyQueryMetaAttributesWhenPresent(query);
207+
return query;
198208
}
199209

200210
private PartTreeMongoQuery createQueryForMethod(String methodName, Class<?>... paramTypes) {
@@ -232,6 +242,7 @@ interface Repo extends MongoRepository<Person, Long> {
232242
@Query(fields = "{ 'firstname }")
233243
Person findByAge(Integer age);
234244

245+
@Meta(maxExecutionTimeMs = 1234)
235246
Person findPersonBy();
236247

237248
PersonProjection findPersonProjectedBy();

0 commit comments

Comments
 (0)