Skip to content

Commit fe338de

Browse files
christophstroblmp911de
authored andcommitted
Don't create PersistentEntity for Nullable wrapper type.
Original pull request: #2394. Closes #2390.
1 parent b92c00c commit fe338de

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java

+18-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.util.concurrent.locks.ReentrantReadWriteLock;
3030
import java.util.function.Predicate;
3131
import java.util.stream.Collectors;
32+
import java.util.stream.StreamSupport;
3233

3334
import org.springframework.beans.BeanUtils;
3435
import org.springframework.beans.BeansException;
@@ -57,6 +58,7 @@
5758
import org.springframework.data.spel.ExtensionAwareEvaluationContextProvider;
5859
import org.springframework.data.util.ClassTypeInformation;
5960
import org.springframework.data.util.KotlinReflectionUtils;
61+
import org.springframework.data.util.NullableWrapperConverters;
6062
import org.springframework.data.util.Optionals;
6163
import org.springframework.data.util.Streamable;
6264
import org.springframework.data.util.TypeInformation;
@@ -482,6 +484,9 @@ protected boolean shouldCreatePersistentEntityFor(TypeInformation<?> type) {
482484
if (simpleTypeHolder.isSimpleType(type.getType())) {
483485
return false;
484486
}
487+
if(NullableWrapperConverters.supports(type.getType())) {
488+
return false;
489+
}
485490

486491
return !KotlinDetector.isKotlinType(type.getType()) || KotlinReflectionUtils.isSupportedKotlinClass(type.getType());
487492
}
@@ -565,7 +570,19 @@ private void createAndRegisterProperty(Property input) {
565570
return;
566571
}
567572

568-
property.getPersistentEntityTypes().forEach(AbstractMappingContext.this::addPersistentEntity);
573+
StreamSupport.stream(property.getPersistentEntityTypes().spliterator(), false)
574+
.map(it -> {
575+
if(it.isNullableWrapper()) {
576+
return it.getActualType();
577+
}
578+
return it;
579+
})
580+
.filter(it -> {
581+
582+
boolean shouldCreate = AbstractMappingContext.this.shouldCreatePersistentEntityFor(it);
583+
return shouldCreate;
584+
})
585+
.forEach(AbstractMappingContext.this::addPersistentEntity);
569586
}
570587
}
571588

src/main/java/org/springframework/data/util/TypeDiscoverer.java

+8
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,10 @@ public TypeInformation<?> getActualType() {
309309
return getComponentType();
310310
}
311311

312+
if (isNullableWrapper()) {
313+
return getComponentType();
314+
}
315+
312316
return this;
313317
}
314318

@@ -384,6 +388,10 @@ protected TypeInformation<?> doGetComponentType() {
384388
return getTypeArgument(Iterable.class, 0);
385389
}
386390

391+
if(isNullableWrapper()) {
392+
return getTypeArgument(rawType, 0);
393+
}
394+
387395
List<TypeInformation<?>> arguments = getTypeArguments();
388396

389397
return arguments.size() > 0 ? arguments.get(0) : null;

src/main/java/org/springframework/data/util/TypeInformation.java

+5
Original file line numberDiff line numberDiff line change
@@ -273,4 +273,9 @@ default TypeInformation<?> getRequiredSuperTypeInformation(Class<?> superType) {
273273
default boolean isSubTypeOf(Class<?> type) {
274274
return !type.equals(getType()) && type.isAssignableFrom(getType());
275275
}
276+
277+
default boolean isNullableWrapper() {
278+
return NullableWrapperConverters.supports(getType());
279+
}
280+
276281
}

0 commit comments

Comments
 (0)