diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AuditingEntityCallback.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AuditingEntityCallback.java index df5ecc1e92..6b5dc4c091 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AuditingEntityCallback.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AuditingEntityCallback.java @@ -27,11 +27,13 @@ * {@link EntityCallback} to populate auditing related fields on an entity about to be saved. * * @author Mark Paluch + * @author yangchef1 * @since 2.2 */ public class AuditingEntityCallback implements BeforeConvertCallback, Ordered { private final ObjectFactory auditingHandlerFactory; + private int order = 100; /** * Creates a new {@link AuditingEntityCallback} using the given {@link MappingContext} and {@link AuditingHandler} @@ -52,6 +54,10 @@ public Object onBeforeConvert(Object entity, String collection) { @Override public int getOrder() { - return 100; + return this.order; + } + + public void setOrder(int order) { + this.order = order; } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ValidatingEntityCallback.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ValidatingEntityCallback.java index 260652616e..cd1afe9567 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ValidatingEntityCallback.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/ValidatingEntityCallback.java @@ -33,11 +33,13 @@ * * @author Rene Felgenträger * @author Mark Paluch + * @author yangchef1 * @since 4.5 */ public class ValidatingEntityCallback implements BeforeSaveCallback, Ordered { private final BeanValidationDelegate delegate; + private int order = 100; /** * Creates a new {@link ValidatingEntityCallback} using the given {@link Validator}. @@ -62,7 +64,10 @@ public Object onBeforeSave(Object entity, Document document, String collection) @Override public int getOrder() { - return 100; + return this.order; } + public void setOrder(int order) { + this.order = order; + } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/AuditingEntityCallbackUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/AuditingEntityCallbackUnitTests.java index 7d01c30345..30869adb53 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/AuditingEntityCallbackUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/AuditingEntityCallbackUnitTests.java @@ -40,6 +40,7 @@ * Unit tests for {@link AuditingEntityCallback}. * * @author Mark Paluch + * @author yangchef1 */ @ExtendWith(MockitoExtension.class) public class AuditingEntityCallbackUnitTests { @@ -92,6 +93,16 @@ void hasExplicitOrder() { assertThat(callback.getOrder()).isEqualTo(100); } + @Test // GH-4914 + void allowsChangingOrderDynamically() { + + assertThat(callback).isInstanceOf(Ordered.class); + assertThat(callback.getOrder()).isEqualTo(100); + + callback.setOrder(50); + assertThat(callback.getOrder()).isEqualTo(50); + } + @Test // DATAMONGO-2261 void propagatesChangedInstanceToEvent() { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/ValidatingEntityCallbackUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/ValidatingEntityCallbackUnitTests.java index e20da176b3..f52c49e2de 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/ValidatingEntityCallbackUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/ValidatingEntityCallbackUnitTests.java @@ -26,12 +26,14 @@ import org.bson.Document; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.springframework.core.Ordered; /** * Unit tests for {@link ValidatingEntityCallback}. * * @author Rene Felgenträger * @author Mark Paluch + * @author yangchef1 */ class ValidatingEntityCallbackUnitTests { @@ -63,6 +65,16 @@ void validateSuccessful() { assertThat(entity).isEqualTo(coordinates); } + @Test // GH-4914 + void allowsChangingOrderDynamically() { + + assertThat(callback).isInstanceOf(Ordered.class); + assertThat(callback.getOrder()).isEqualTo(100); + + callback.setOrder(50); + assertThat(callback.getOrder()).isEqualTo(50); + } + record Coordinates(@NotNull @Min(0) Integer x, @NotNull @Min(0) Integer y) { Document toDocument() {