From df16f9535c32a2771af9600e4801f4b688be1103 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 | 7 ++--- .../AbstractMappingContextUnitTests.java | 28 ++++++++++++++++--- 3 files changed, 26 insertions(+), 13 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 4d9e4f27d..46633562c 100644 --- a/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java +++ b/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java @@ -402,10 +402,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 c4b7a1176..5e6878151 100644 --- a/src/main/java/org/springframework/data/mapping/model/AbstractPersistentProperty.java +++ b/src/main/java/org/springframework/data/mapping/model/AbstractPersistentProperty.java @@ -113,18 +113,15 @@ public abstract class AbstractPersistentProperty

public Iterable> getPersistentEntityType() { List> result = new ArrayList>(); - TypeInformation type = getTypeInformation(); - if (isEntity()) { - result.add(type); - } - if (type.isCollectionLike() || isMap()) { TypeInformation nestedType = getTypeInformationIfNotSimpleType(getTypeInformation().getActualType()); if (nestedType != null) { result.add(nestedType); } + } else if (isEntity()) { + result.add(type); } return result; 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 cca004b81..7ec9bea92 100644 --- a/src/test/java/org/springframework/data/mapping/context/AbstractMappingContextUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/context/AbstractMappingContextUnitTests.java @@ -20,10 +20,10 @@ import static org.junit.Assert.*; import static org.mockito.Mockito.*; import groovy.lang.MetaClass; -import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.TreeMap; import org.junit.Before; import org.junit.Test; @@ -232,14 +232,33 @@ public class AbstractMappingContextUnitTests { public void hasPersistentEntityForCollectionPropertiesAfterInitialization() { context.getPersistentEntity(Sample.class); + 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(Person.class)) { - return; + if (entity.getType().equals(type)) { + found = true; + break; } } - fail("Expected to find persistent entity for Person!"); + if (found != expected) { + fail(String.format("%s to find persistent entity for %s!", expected ? "Expected" : "Did not expect", type)); + } } class Person { @@ -254,6 +273,7 @@ public class AbstractMappingContextUnitTests { MetaClass metaClass; List persons; + TreeMap personMap; } static class Base {