From ab9c5d73a0c20db84002ecfff3f735a22d13b34a Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 30 Jul 2020 16:19:10 +0200 Subject: [PATCH] DATAMONGO-2599 - Eagerly consider enum types as simple types. MongoSimpleTypes now eagerly checks if a type is a simple one to avoid PersistentEntity registration for ChronoUnit. --- .../mongodb/core/mapping/MongoSimpleTypes.java | 5 +++++ .../mapping/MongoMappingContextUnitTests.java | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/MongoSimpleTypes.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/MongoSimpleTypes.java index 21cee062e..4a999ce08 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/MongoSimpleTypes.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/MongoSimpleTypes.java @@ -48,6 +48,7 @@ import com.mongodb.client.model.geojson.Polygon; * * @author Oliver Gierke * @author Christoph Strobl + * @author Mark Paluch */ public abstract class MongoSimpleTypes { @@ -109,6 +110,10 @@ public abstract class MongoSimpleTypes { @Override public boolean isSimpleType(Class type) { + if (type.isEnum()) { + return true; + } + if (type.getName().startsWith("java.time")) { return false; } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/MongoMappingContextUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/MongoMappingContextUnitTests.java index d922edd95..4262c5448 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/MongoMappingContextUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/MongoMappingContextUnitTests.java @@ -17,6 +17,7 @@ package org.springframework.data.mongodb.core.mapping; import static org.assertj.core.api.Assertions.*; +import java.time.temporal.ChronoUnit; import java.util.AbstractMap; import java.util.Collections; import java.util.Locale; @@ -160,6 +161,18 @@ public class MongoMappingContextUnitTests { .withMessageContaining("score").withMessageContaining("Float").withMessageContaining("Double"); } + @Test // DATAMONGO-2599 + void shouldNotCreateEntityForEnum() { + + MongoMappingContext context = new MongoMappingContext(); + + BasicMongoPersistentEntity entity = context.getRequiredPersistentEntity(ClassWithChronoUnit.class); + + assertThat(entity.getPersistentProperty("unit").isEntity()).isFalse(); + assertThat(context.hasPersistentEntityFor(ChronoUnit.class)).isFalse(); + assertThat(context.getPersistentEntity(ChronoUnit.class)).isNull(); + } + public class SampleClass { Map children; @@ -226,4 +239,9 @@ public class MongoMappingContextUnitTests { @TextScore Locale score; } + + class ClassWithChronoUnit { + + ChronoUnit unit; + } }