diff --git a/src/main/java/org/springframework/data/keyvalue/core/mapping/context/KeyValueMappingContext.java b/src/main/java/org/springframework/data/keyvalue/core/mapping/context/KeyValueMappingContext.java index 6a815d9..e4fd49f 100644 --- a/src/main/java/org/springframework/data/keyvalue/core/mapping/context/KeyValueMappingContext.java +++ b/src/main/java/org/springframework/data/keyvalue/core/mapping/context/KeyValueMappingContext.java @@ -15,6 +15,8 @@ */ package org.springframework.data.keyvalue.core.mapping.context; +import java.util.Collections; + import org.springframework.data.keyvalue.core.mapping.BasicKeyValuePersistentEntity; import org.springframework.data.keyvalue.core.mapping.KeySpaceResolver; import org.springframework.data.keyvalue.core.mapping.KeyValuePersistentEntity; @@ -39,6 +41,10 @@ public class KeyValueMappingContext, P private @Nullable KeySpaceResolver fallbackKeySpaceResolver; + public KeyValueMappingContext() { + setSimpleTypeHolder(new KeyValueSimpleTypeHolder()); + } + /** * Configures the {@link KeySpaceResolver} to be used if not explicit key space is annotated to the domain type. * @@ -59,4 +65,24 @@ public class KeyValueMappingContext, P protected P createPersistentProperty(Property property, E owner, SimpleTypeHolder simpleTypeHolder) { return (P) new KeyValuePersistentProperty<>(property, owner, simpleTypeHolder); } + + /** + * @since 2.5.1 + */ + private static class KeyValueSimpleTypeHolder extends SimpleTypeHolder { + + public KeyValueSimpleTypeHolder() { + super(Collections.emptySet(), true); + } + + @Override + public boolean isSimpleType(Class type) { + + if (type.getName().startsWith("java.math.") || type.getName().startsWith("java.util.")) { + return true; + } + + return super.isSimpleType(type); + } + } } diff --git a/src/test/java/org/springframework/data/keyvalue/core/mapping/context/KeyValueMappingContextUnitTests.java b/src/test/java/org/springframework/data/keyvalue/core/mapping/context/KeyValueMappingContextUnitTests.java new file mode 100644 index 0000000..7ca55c2 --- /dev/null +++ b/src/test/java/org/springframework/data/keyvalue/core/mapping/context/KeyValueMappingContextUnitTests.java @@ -0,0 +1,45 @@ +/* + * Copyright 2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.keyvalue.core.mapping.context; + +import static org.assertj.core.api.Assertions.*; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.UUID; + +import org.junit.jupiter.api.Test; + +import org.springframework.data.keyvalue.core.mapping.KeyValuePersistentEntity; +import org.springframework.data.keyvalue.core.mapping.KeyValuePersistentProperty; + +/** + * Unit test for {@link KeyValueMappingContext}. + * + * @author Mark Paluch + */ +class KeyValueMappingContextUnitTests

> { + + @Test + void shouldNotCreateEntitiesForJavaStandardTypes() { + + KeyValueMappingContext, P> mappingContext = new KeyValueMappingContext<>(); + + assertThat(mappingContext.getPersistentEntity(BigInteger.class)).isNull(); + assertThat(mappingContext.getPersistentEntity(BigDecimal.class)).isNull(); + assertThat(mappingContext.getPersistentEntity(UUID.class)).isNull(); + } +}