Skip to content

Commit ddc3925

Browse files
christophstroblodrotbohm
authored andcommitted
DATAMONGO-1291 - Made @document usable as meta-annotation.
We now use Spring's AnnotationUtils.findAnnotation(…) for @document lookup which enables the full power of Spring 4.2's composable annotations. Original pull request: #326.
1 parent f8416ed commit ddc3925

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntity.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.context.ApplicationContextAware;
2727
import org.springframework.context.expression.BeanFactoryAccessor;
2828
import org.springframework.context.expression.BeanFactoryResolver;
29+
import org.springframework.core.annotation.AnnotationUtils;
2930
import org.springframework.data.annotation.Id;
3031
import org.springframework.data.mapping.Association;
3132
import org.springframework.data.mapping.AssociationHandler;
@@ -77,7 +78,7 @@ public BasicMongoPersistentEntity(TypeInformation<T> typeInformation) {
7778
Class<?> rawType = typeInformation.getType();
7879
String fallback = MongoCollectionUtils.getPreferredCollectionName(rawType);
7980

80-
Document document = rawType.getAnnotation(Document.class);
81+
Document document = AnnotationUtils.findAnnotation(rawType, Document.class);
8182

8283
this.expression = detectExpression(document);
8384
this.context = new StandardEvaluationContext();

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/BasicMongoPersistentEntityUnitTests.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@
1919
import static org.junit.Assert.*;
2020
import static org.mockito.Mockito.*;
2121

22+
import java.lang.annotation.ElementType;
23+
import java.lang.annotation.Retention;
24+
import java.lang.annotation.RetentionPolicy;
25+
import java.lang.annotation.Target;
26+
2227
import org.junit.Test;
2328
import org.junit.runner.RunWith;
2429
import org.mockito.Mock;
@@ -226,6 +231,18 @@ public void verifyShouldPassForNonLazyDBRefOnFinalClass() {
226231
verify(dbRefMock, times(1)).lazy();
227232
}
228233

234+
/**
235+
* @see DATAMONGO-1291
236+
*/
237+
@Test
238+
public void metaInformationShouldBeReadCorrectlyFromInheritedDocumentAnnotation() {
239+
240+
BasicMongoPersistentEntity<DocumentWithCustomAnnotation> entity = new BasicMongoPersistentEntity<DocumentWithCustomAnnotation>(
241+
ClassTypeInformation.from(DocumentWithCustomAnnotation.class));
242+
243+
assertThat(entity.getCollection(), is("collection-1"));
244+
}
245+
229246
@Document(collection = "contacts")
230247
class Contact {
231248

@@ -261,4 +278,15 @@ static class DocumentWithLanguage {
261278
static class AnyDocument {
262279

263280
}
281+
282+
@CustomDocumentAnnotation
283+
static class DocumentWithCustomAnnotation {
284+
285+
}
286+
287+
@Retention(RetentionPolicy.RUNTIME)
288+
@Target({ ElementType.TYPE })
289+
@Document(collection = "collection-1")
290+
static @interface CustomDocumentAnnotation {
291+
}
264292
}

0 commit comments

Comments
 (0)