diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/PreferredConstructor.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/PreferredConstructor.java index 0c5ea7d7f..fb58c1d49 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/PreferredConstructor.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/PreferredConstructor.java @@ -155,6 +155,8 @@ public class PreferredConstructor> { private final String key; private final PersistentEntity entity; + private Boolean enclosingClassCache; + /** * Creates a new {@link Parameter} with the given name, {@link TypeInformation} as well as an array of * {@link Annotation}s. Will insprect the annotations for an {@link Value} annotation to lookup a key or an SpEL @@ -244,8 +246,12 @@ public class PreferredConstructor> { private boolean isEnclosingClassParameter() { - Class owningType = entity.getType(); - return owningType.isMemberClass() && type.getType().equals(owningType.getEnclosingClass()); + if (enclosingClassCache == null) { + Class owningType = entity.getType(); + this.enclosingClassCache = owningType.isMemberClass() && type.getType().equals(owningType.getEnclosingClass()); + } + + return enclosingClassCache; } /* diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PersistentEntityParameterValueProvider.java b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PersistentEntityParameterValueProvider.java index bc138064f..df7daa65b 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PersistentEntityParameterValueProvider.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/mapping/model/PersistentEntityParameterValueProvider.java @@ -86,6 +86,11 @@ public class PersistentEntityParameterValueProvider

propertyValueProvider; + @Mock + P property; /** * @see DATACMNS-134 @@ -50,7 +52,11 @@ public class PersistentEntityParameterValueProviderUnitTests

entity = new BasicPersistentEntity(ClassTypeInformation.from(Inner.class)); + PersistentEntity entity = new BasicPersistentEntity(ClassTypeInformation.from(Inner.class)) { + public P getPersistentProperty(String name) { + return property; + } + }; PreferredConstructor constructor = entity.getPersistenceConstructor(); Iterator> iterator = constructor.getParameters().iterator(); @@ -65,6 +71,8 @@ public class PersistentEntityParameterValueProviderUnitTests