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.
This commit is contained in:
Mark Paluch
2020-07-30 16:19:10 +02:00
parent 13caa162db
commit ab9c5d73a0
2 changed files with 23 additions and 0 deletions

View File

@@ -48,6 +48,7 @@ import com.mongodb.client.model.geojson.Polygon;
* *
* @author Oliver Gierke * @author Oliver Gierke
* @author Christoph Strobl * @author Christoph Strobl
* @author Mark Paluch
*/ */
public abstract class MongoSimpleTypes { public abstract class MongoSimpleTypes {
@@ -109,6 +110,10 @@ public abstract class MongoSimpleTypes {
@Override @Override
public boolean isSimpleType(Class<?> type) { public boolean isSimpleType(Class<?> type) {
if (type.isEnum()) {
return true;
}
if (type.getName().startsWith("java.time")) { if (type.getName().startsWith("java.time")) {
return false; return false;
} }

View File

@@ -17,6 +17,7 @@ package org.springframework.data.mongodb.core.mapping;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import java.time.temporal.ChronoUnit;
import java.util.AbstractMap; import java.util.AbstractMap;
import java.util.Collections; import java.util.Collections;
import java.util.Locale; import java.util.Locale;
@@ -160,6 +161,18 @@ public class MongoMappingContextUnitTests {
.withMessageContaining("score").withMessageContaining("Float").withMessageContaining("Double"); .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 { public class SampleClass {
Map<String, SampleClass> children; Map<String, SampleClass> children;
@@ -226,4 +239,9 @@ public class MongoMappingContextUnitTests {
@TextScore Locale score; @TextScore Locale score;
} }
class ClassWithChronoUnit {
ChronoUnit unit;
}
} }