From fa41724bfe8b7f36978aa1e5df6b789a66d93921 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Thu, 27 Mar 2014 11:56:17 +0100 Subject: [PATCH] DATACMNS-479 - Make sure Map types are not added to the mapping context. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changed the algorithm for nested PersistentEntity detection to only use PersistentProperty.getPersistentEntityTypes(…) and make sure we return unwrap Maps and Collections inside the method correctly. --- .../context/AbstractMappingContext.java | 4 --- .../model/AbstractPersistentProperty.java | 2 +- .../AbstractMappingContextUnitTests.java | 30 ++++++++++++++++++- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java b/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java index bc05971f0..e1219c1e7 100644 --- a/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java +++ b/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java @@ -466,10 +466,6 @@ public abstract class AbstractMappingContext candidate : property.getPersistentEntityType()) { addPersistentEntity(candidate); } diff --git a/src/main/java/org/springframework/data/mapping/model/AbstractPersistentProperty.java b/src/main/java/org/springframework/data/mapping/model/AbstractPersistentProperty.java index f94dd38a4..09204345b 100644 --- a/src/main/java/org/springframework/data/mapping/model/AbstractPersistentProperty.java +++ b/src/main/java/org/springframework/data/mapping/model/AbstractPersistentProperty.java @@ -126,7 +126,7 @@ public abstract class AbstractPersistentProperty

if (nestedType != null) { result.add(nestedType); } - } else { + } else if (isEntity()) { result.add(type); } diff --git a/src/test/java/org/springframework/data/mapping/context/AbstractMappingContextUnitTests.java b/src/test/java/org/springframework/data/mapping/context/AbstractMappingContextUnitTests.java index 5f464a456..7ec9bea92 100644 --- a/src/test/java/org/springframework/data/mapping/context/AbstractMappingContextUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/context/AbstractMappingContextUnitTests.java @@ -23,6 +23,7 @@ import groovy.lang.MetaClass; import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.TreeMap; import org.junit.Before; import org.junit.Test; @@ -231,7 +232,33 @@ public class AbstractMappingContextUnitTests { public void hasPersistentEntityForCollectionPropertiesAfterInitialization() { context.getPersistentEntity(Sample.class); - assertThat(context.hasPersistentEntityFor(Person.class), is(true)); + assertHasEntityFor(Person.class, context, true); + } + + /** + * @see DATACMNS-479 + */ + @Test + public void doesNotAddMapImplementationClassesAsPersistentEntity() { + + context.getPersistentEntity(Sample.class); + assertHasEntityFor(TreeMap.class, context, false); + } + + private static void assertHasEntityFor(Class type, SampleMappingContext context, boolean expected) { + + boolean found = false; + + for (BasicPersistentEntity entity : context.getPersistentEntities()) { + if (entity.getType().equals(type)) { + found = true; + break; + } + } + + if (found != expected) { + fail(String.format("%s to find persistent entity for %s!", expected ? "Expected" : "Did not expect", type)); + } } class Person { @@ -246,6 +273,7 @@ public class AbstractMappingContextUnitTests { MetaClass metaClass; List persons; + TreeMap personMap; } static class Base {