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 {} }