diff --git a/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java b/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java index deeec8c62..243287124 100644 --- a/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java +++ b/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java @@ -197,9 +197,34 @@ public abstract class AbstractMappingContext entity = persistentEntities.get(ClassTypeInformation.from(type)); + TypeInformation typeInformation = ClassTypeInformation.from(type); - return entity == null ? false : entity.isPresent(); + try { + + read.lock(); + + // Try the original type first + Optional entity = persistentEntities.get(typeInformation); + + if (entity != null) { + return entity.isPresent(); + } + + // User type is the same? + TypeInformation userTypeInformation = typeInformation.getUserTypeInformation(); + + if (userTypeInformation.equals(typeInformation)) { + return false; + } + + // Try the user type + entity = persistentEntities.get(typeInformation.getUserTypeInformation()); + + return entity == null ? false : entity.isPresent(); + + } finally { + read.unlock(); + } } @Nullable diff --git a/src/test/java/org/springframework/data/mapping/context/AbstractMappingContextUnitTests.java b/src/test/java/org/springframework/data/mapping/context/AbstractMappingContextUnitTests.java index 969b708d6..fe1cff15b 100755 --- a/src/test/java/org/springframework/data/mapping/context/AbstractMappingContextUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/context/AbstractMappingContextUnitTests.java @@ -40,7 +40,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.aop.SpringProxy; import org.springframework.aop.framework.Advised; - import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationEvent; import org.springframework.data.annotation.Id; @@ -334,7 +333,7 @@ class AbstractMappingContextUnitTests { persistentEntity.getTypeInformation().getType().equals(Base.class); assertThat(context.hasPersistentEntityFor(Base.class)).isTrue(); - assertThat(context.hasPersistentEntityFor(Base$$SpringProxy$873fa2e.class)).isFalse(); + assertThat(context.hasPersistentEntityFor(Base$$SpringProxy$873fa2e.class)).isTrue(); BasicPersistentEntity persistentEntityForProxy = context .getRequiredPersistentEntity(Base$$SpringProxy$873fa2e.class);