diff --git a/src/main/java/org/springframework/data/repository/core/support/DefaultRepositoryInformation.java b/src/main/java/org/springframework/data/repository/core/support/DefaultRepositoryInformation.java index f0d9a03a0..d8f498208 100644 --- a/src/main/java/org/springframework/data/repository/core/support/DefaultRepositoryInformation.java +++ b/src/main/java/org/springframework/data/repository/core/support/DefaultRepositoryInformation.java @@ -246,6 +246,12 @@ class DefaultRepositoryInformation implements RepositoryInformation { return method; } + Method result = findMethod(baseClass, method.getName(), method.getParameterTypes()); + + if (result != null) { + return result; + } + for (Method baseClassMethod : baseClass.getMethods()) { // Wrong name diff --git a/src/test/java/org/springframework/data/repository/core/support/DefaultRepositoryInformationUnitTests.java b/src/test/java/org/springframework/data/repository/core/support/DefaultRepositoryInformationUnitTests.java index 75db82480..28b3ae72d 100644 --- a/src/test/java/org/springframework/data/repository/core/support/DefaultRepositoryInformationUnitTests.java +++ b/src/test/java/org/springframework/data/repository/core/support/DefaultRepositoryInformationUnitTests.java @@ -18,6 +18,8 @@ package org.springframework.data.repository.core.support; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; +import lombok.experimental.Delegate; + import java.io.Serializable; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -257,6 +259,7 @@ public class DefaultRepositoryInformationUnitTests { /** * @see DATACMNS-939 + * @throws Exception */ @Test public void ignoresStaticMethod() throws SecurityException, NoSuchMethodException { @@ -285,6 +288,22 @@ public class DefaultRepositoryInformationUnitTests { assertThat(information.getQueryMethods(), not(hasItem(method))); } + /** + * @see DATACMNS-943 + * @throws Exception + */ + @Test + public void usesCorrectSaveOverload() throws Exception { + + RepositoryMetadata metadata = new DefaultRepositoryMetadata(DummyRepository.class); + RepositoryInformation information = new DefaultRepositoryInformation(metadata, DummyRepositoryImpl.class, null); + + Method method = DummyRepository.class.getMethod("save", Iterable.class); + + assertThat(information.getTargetClassMethod(method), + is(DummyRepositoryImpl.class.getMethod("save", Iterable.class))); + } + private static Method getMethodFrom(Class type, String name) { for (Method method : type.getMethods()) { @@ -338,7 +357,7 @@ public class DefaultRepositoryInformationUnitTests { @Override public Iterator iterator() { - return Collections.emptySet().iterator(); + return Collections. emptySet().iterator(); } } @@ -401,4 +420,15 @@ public class DefaultRepositoryInformationUnitTests { } static class Sample {} + + interface DummyRepository extends CrudRepository { + + @Override + List save(Iterable entites); + } + + static class DummyRepositoryImpl implements CrudRepository { + + private @Delegate CrudRepository delegate; + } }