diff --git a/src/main/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContext.java b/src/main/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContext.java index cbd73ed7d..4ea38a135 100644 --- a/src/main/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContext.java +++ b/src/main/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContext.java @@ -86,7 +86,7 @@ public class JpaMetamodelMappingContext */ @Override protected boolean shouldCreatePersistentEntityFor(TypeInformation type) { - return models.isMetamodelManagedType(type); + return models.isMetamodelManagedType(type.getUserTypeInformation()); } /** diff --git a/src/test/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContextIntegrationTests.java b/src/test/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContextIntegrationTests.java index 15b36ceaa..81d4b0981 100644 --- a/src/test/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContextIntegrationTests.java +++ b/src/test/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContextIntegrationTests.java @@ -22,6 +22,7 @@ import java.util.Collections; import javax.persistence.EntityManager; import org.hibernate.proxy.HibernateProxy; +import org.hibernate.proxy.LazyInitializer; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -51,6 +52,7 @@ import org.springframework.transaction.support.TransactionTemplate; * @author Oliver Gierke * @author Thomas Darimont * @author Jens Schauder + * @author Mark Paluch * @since 1.3 */ @ExtendWith(SpringExtension.class) @@ -75,6 +77,16 @@ public class JpaMetamodelMappingContextIntegrationTests { assertThat(entity).isNotNull(); } + @Test // GH-2383 + void considersProxiedTypes() { + + JpaPersistentEntityImpl directEntity = context.getRequiredPersistentEntity(User.class); + assertThat(directEntity).isNotNull(); + + JpaPersistentEntityImpl unproxiedEntitx = context.getRequiredPersistentEntity(UserProxy.class); + assertThat(unproxiedEntitx).isNotNull().isSameAs(directEntity); + } + @Test void detectsIdProperty() { @@ -183,4 +195,17 @@ public class JpaMetamodelMappingContextIntegrationTests { static class Config { } + + static class UserProxy extends User implements HibernateProxy { + + @Override + public Object writeReplace() { + return null; + } + + @Override + public LazyInitializer getHibernateLazyInitializer() { + return null; + } + } }