diff --git a/src/main/java/org/springframework/data/repository/core/support/DefaultCrudMethods.java b/src/main/java/org/springframework/data/repository/core/support/DefaultCrudMethods.java index 0654174d2..83fd9ed48 100644 --- a/src/main/java/org/springframework/data/repository/core/support/DefaultCrudMethods.java +++ b/src/main/java/org/springframework/data/repository/core/support/DefaultCrudMethods.java @@ -103,7 +103,8 @@ class DefaultCrudMethods implements CrudMethods { @SuppressWarnings("unchecked") private Method selectMostSuitableDeleteMethod(RepositoryMetadata metadata) { - for (Class type : Arrays.asList(metadata.getIdType(), Serializable.class, Iterable.class)) { + for (Class type : Arrays.asList(metadata.getDomainType(), metadata.getIdType(), Serializable.class, + Iterable.class)) { Method candidate = findMethod(metadata.getRepositoryInterface(), DELETE, type); if (candidate != null) { return getMostSpecificMethod(candidate, metadata.getRepositoryInterface()); diff --git a/src/test/java/org/springframework/data/repository/core/support/DefaultCrudMethodsUnitTests.java b/src/test/java/org/springframework/data/repository/core/support/DefaultCrudMethodsUnitTests.java index bb7287da4..823ec788a 100644 --- a/src/test/java/org/springframework/data/repository/core/support/DefaultCrudMethodsUnitTests.java +++ b/src/test/java/org/springframework/data/repository/core/support/DefaultCrudMethodsUnitTests.java @@ -132,6 +132,16 @@ public class DefaultCrudMethodsUnitTests { assertSaveMethodOn(RepositoryWithCustomSave.class, RepositoryWithCustomSave.class.getMethod("save", Domain.class)); } + /** + * @see DATACMNS-539 + */ + @Test + public void detectsOverriddenDeleteMethodForEntity() throws Exception { + + assertDeleteMethodOn(RepositoryWithDeleteMethodForEntityOverloaded.class, + RepositoryWithDeleteMethodForEntityOverloaded.class.getMethod("delete", Domain.class)); + } + private static CrudMethods getMethodsFor(Class repositoryInterface) { RepositoryMetadata metadata = new DefaultRepositoryMetadata(repositoryInterface); @@ -250,8 +260,16 @@ public class DefaultCrudMethodsUnitTests { Domain save(Serializable entity); - void delete(Domain o); + void delete(String o); Domain findOne(Domain o); } + + /** + * @see DATACMNS-539 + */ + interface RepositoryWithDeleteMethodForEntityOverloaded extends CrudRepository { + + void delete(Domain entity); + } }