diff --git a/src/main/java/org/springframework/data/repository/core/support/EventPublishingRepositoryProxyPostProcessor.java b/src/main/java/org/springframework/data/repository/core/support/EventPublishingRepositoryProxyPostProcessor.java index 3311c9160..3079e2112 100644 --- a/src/main/java/org/springframework/data/repository/core/support/EventPublishingRepositoryProxyPostProcessor.java +++ b/src/main/java/org/springframework/data/repository/core/support/EventPublishingRepositoryProxyPostProcessor.java @@ -89,7 +89,7 @@ public class EventPublishingRepositoryProxyPostProcessor implements RepositoryPr Object result = invocation.proceed(); - if (!invocation.getMethod().getName().equals("save")) { + if (!invocation.getMethod().getName().startsWith("save")) { return result; } diff --git a/src/test/java/org/springframework/data/repository/core/support/EventPublishingRepositoryProxyPostProcessorUnitTests.java b/src/test/java/org/springframework/data/repository/core/support/EventPublishingRepositoryProxyPostProcessorUnitTests.java index 32dccf308..2e854db77 100644 --- a/src/test/java/org/springframework/data/repository/core/support/EventPublishingRepositoryProxyPostProcessorUnitTests.java +++ b/src/test/java/org/springframework/data/repository/core/support/EventPublishingRepositoryProxyPostProcessorUnitTests.java @@ -25,8 +25,10 @@ import lombok.Getter; import lombok.Value; import java.io.Serializable; +import java.lang.reflect.Method; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.UUID; import org.aopalliance.aop.Advice; @@ -191,6 +193,23 @@ public class EventPublishingRepositoryProxyPostProcessorUnitTests { } } + @Test // DATACMNS-1113 + public void invokesEventsForMethodsThatStartsWithSave() throws Throwable { + + Method method = SampleRepository.class.getMethod("saveAndFlush", MultipleEvents.class); + doReturn(method).when(invocation).getMethod(); + + SomeEvent event = new SomeEvent(); + MultipleEvents sample = MultipleEvents.of(Collections.singletonList(event)); + doReturn(new Object[] { sample }).when(invocation).getArguments(); + + EventPublishingMethodInterceptor// + .of(EventPublishingMethod.of(MultipleEvents.class), publisher)// + .invoke(invocation); + + verify(publisher).publishEvent(event); + } + @Value(staticConstructor = "of") static class MultipleEvents { @Getter(onMethod = @__(@DomainEvents)) Collection events; @@ -206,5 +225,8 @@ public class EventPublishingRepositoryProxyPostProcessorUnitTests { UUID id = UUID.randomUUID(); } - interface SampleRepository extends CrudRepository {} + interface SampleRepository extends CrudRepository { + + MultipleEvents saveAndFlush(MultipleEvents events); + } }