From 2388b6fa90eb6edfb7e8fd30542dd12f384b1102 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 19 Nov 2014 17:05:50 +0100 Subject: [PATCH] DATACMNS-597 - Fixed to strict consistency check in PersistentPropertyAccessor lookup. BasicpersistentEntity now allows subtypes to be handed into the PersistentPropertyAccessor lookup to support inheritance hierarchies as well as interface based PersistentEntity scenarios. --- .../data/mapping/model/BasicPersistentEntity.java | 2 +- .../model/BasicPersistentEntityUnitTests.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/mapping/model/BasicPersistentEntity.java b/src/main/java/org/springframework/data/mapping/model/BasicPersistentEntity.java index 6354a4a56..8121926c2 100644 --- a/src/main/java/org/springframework/data/mapping/model/BasicPersistentEntity.java +++ b/src/main/java/org/springframework/data/mapping/model/BasicPersistentEntity.java @@ -372,7 +372,7 @@ public class BasicPersistentEntity> implement public PersistentPropertyAccessor getPropertyAccessor(Object bean) { Assert.notNull(bean, "Target bean must not be null!"); - Assert.isTrue(getType().equals(bean.getClass()), "Target bean is not of type of the persistent entity!"); + Assert.isTrue(getType().isInstance(bean), "Target bean is not of type of the persistent entity!"); return new BeanWrapper(bean); } diff --git a/src/test/java/org/springframework/data/mapping/model/BasicPersistentEntityUnitTests.java b/src/test/java/org/springframework/data/mapping/model/BasicPersistentEntityUnitTests.java index cd05a48b2..d9c8fa5bf 100644 --- a/src/test/java/org/springframework/data/mapping/model/BasicPersistentEntityUnitTests.java +++ b/src/test/java/org/springframework/data/mapping/model/BasicPersistentEntityUnitTests.java @@ -210,6 +210,18 @@ public class BasicPersistentEntityUnitTests> { entity.getPropertyAccessor("foo"); } + /** + * @see DATACMNS-597 + */ + @Test + public void supportsSubtypeInstancesOnPropertyAccessorLookup() { + + SampleMappingContext context = new SampleMappingContext(); + PersistentEntity entity = context.getPersistentEntity(Entity.class); + + assertThat(entity.getPropertyAccessor(new Subtype()), is(notNullValue())); + } + private BasicPersistentEntity createEntity(Comparator comparator) { return new BasicPersistentEntity(ClassTypeInformation.from(Person.class), comparator); } @@ -232,4 +244,6 @@ public class BasicPersistentEntityUnitTests> { return property; } } + + static class Subtype extends Entity {} }