Skip to content

Commit 3f97f1b

Browse files
committed
Unwrap user type when checking if type is JPA-managed.
We now unwrap the user type in JpaMetamodelMappingContext.shouldCreatePersistentEntityFor(…) to enable usage of proxy types when requesting a PersistentEntity. Previously, we checked against the proxy type which is not managed by the JPA meta-model. Closes #2383
1 parent 732a25c commit 3f97f1b

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

src/main/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContext.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ protected JpaPersistentProperty createPersistentProperty(Property property, JpaP
8686
*/
8787
@Override
8888
protected boolean shouldCreatePersistentEntityFor(TypeInformation<?> type) {
89-
return models.isMetamodelManagedType(type);
89+
return models.isMetamodelManagedType(type.getUserTypeInformation());
9090
}
9191

9292
/**

src/test/java/org/springframework/data/jpa/mapping/JpaMetamodelMappingContextIntegrationTests.java

+25
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import javax.persistence.EntityManager;
2323

2424
import org.hibernate.proxy.HibernateProxy;
25+
import org.hibernate.proxy.LazyInitializer;
2526
import org.junit.jupiter.api.BeforeEach;
2627
import org.junit.jupiter.api.Test;
2728
import org.junit.jupiter.api.extension.ExtendWith;
@@ -51,6 +52,7 @@
5152
* @author Oliver Gierke
5253
* @author Thomas Darimont
5354
* @author Jens Schauder
55+
* @author Mark Paluch
5456
* @since 1.3
5557
*/
5658
@ExtendWith(SpringExtension.class)
@@ -75,6 +77,16 @@ void setsUpMappingContextCorrectly() {
7577
assertThat(entity).isNotNull();
7678
}
7779

80+
@Test // GH-2383
81+
void considersProxiedTypes() {
82+
83+
JpaPersistentEntityImpl<?> directEntity = context.getRequiredPersistentEntity(User.class);
84+
assertThat(directEntity).isNotNull();
85+
86+
JpaPersistentEntityImpl<?> unproxiedEntitx = context.getRequiredPersistentEntity(UserProxy.class);
87+
assertThat(unproxiedEntitx).isNotNull().isSameAs(directEntity);
88+
}
89+
7890
@Test
7991
void detectsIdProperty() {
8092

@@ -183,4 +195,17 @@ void traversesEmbeddablesButNoOtherMappingAnnotations() {
183195
static class Config {
184196

185197
}
198+
199+
static class UserProxy extends User implements HibernateProxy {
200+
201+
@Override
202+
public Object writeReplace() {
203+
return null;
204+
}
205+
206+
@Override
207+
public LazyInitializer getHibernateLazyInitializer() {
208+
return null;
209+
}
210+
}
186211
}

0 commit comments

Comments
 (0)