From 789f620af1d0feabf29856cea6c1462e67b33a68 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Tue, 15 Jul 2014 10:37:16 +0200 Subject: [PATCH] DATACMNS-539 - DefaultCrudMethods now detects delete(T t) methods. The CRUD method detection now also discovers delete methods taking the domain type as argument. Related ticket: DATAREST-319. --- .../core/support/DefaultCrudMethods.java | 3 ++- .../support/DefaultCrudMethodsUnitTests.java | 20 ++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) 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); + } }