diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolver.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolver.java index 6e66f48be..8650cd9f8 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolver.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolver.java @@ -108,7 +108,7 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver { try { if (persistentProperty.isEntity()) { - indexInformation.addAll(resolveIndexForClass(persistentProperty.getActualType(), + indexInformation.addAll(resolveIndexForClass(persistentProperty.getTypeInformation().getActualType(), persistentProperty.getFieldName(), root.getCollection(), guard)); } @@ -135,7 +135,7 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver { * @return List of {@link IndexDefinitionHolder} representing indexes for given type and its referenced property * types. Will never be {@code null}. */ - private List resolveIndexForClass(final Class type, final String path, + private List resolveIndexForClass(final TypeInformation type, final String path, final String collection, final CycleGuard guard) { MongoPersistentEntity entity = mappingContext.getPersistentEntity(type); @@ -153,8 +153,8 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver { if (persistentProperty.isEntity()) { try { - indexInformation.addAll(resolveIndexForClass(persistentProperty.getActualType(), propertyDotPath, - collection, guard)); + indexInformation.addAll(resolveIndexForClass(persistentProperty.getTypeInformation().getActualType(), + propertyDotPath, collection, guard)); } catch (CyclicPropertyReferenceException e) { LOGGER.info(e.getMessage()); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolverUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolverUnitTests.java index 527cd59cf..92b14be83 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolverUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolverUnitTests.java @@ -853,6 +853,19 @@ public class MongoPersistentEntityIndexResolverUnitTests { } + /** + * @see DATAMONGO-1263 + */ + @Test + public void shouldConsiderGenericTypeArgumentsOfCollectionElements() { + + List indexDefinitions = prepareMappingContextAndResolveIndexForType(EntityWithGenericTypeWrapperAsElement.class); + + assertThat(indexDefinitions, hasSize(1)); + assertThat((String) indexDefinitions.get(0).getIndexOptions().get("name"), + equalTo("listWithGeneircTypeElement.entity.property_index")); + } + @Document static class MixedIndexRoot { @@ -1028,6 +1041,15 @@ public class MongoPersistentEntityIndexResolverUnitTests { NoCycleButIndenticallNamedPropertiesDeeplyNested propertyWithIndexedStructure; } + static class GenericEntityWrapper { + T entity; + } + + @Document + static class EntityWithGenericTypeWrapperAsElement { + List> listWithGeneircTypeElement; + } + } private static List prepareMappingContextAndResolveIndexForType(Class type) {