From f2dc64ec52e361acdd5022032fb9dde27b9ca7bd Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Tue, 29 Mar 2022 09:36:06 +0200 Subject: [PATCH] Polishing. Formatting and comments. See #1201 See #1199 Original pull request #1208 --- .../jdbc/core/AggregateChangeExecutor.java | 16 ++++++++++++++++ .../JdbcAggregateChangeExecutionContext.java | 7 +++++-- ...AggregateTemplateHsqlIntegrationTests.java | 10 +++++----- ...angeExecutorContextImmutableUnitTests.java | 6 ++++++ ...gregateChangeExecutorContextUnitTests.java | 7 ++++--- ...ositoryBeforeSaveHsqlIntegrationTests.java | 19 ++++++++++--------- ...egateTemplateHsqlIntegrationTests-hsql.sql | 7 ++++--- .../data/jdbc/mybatis/DummyEntityMapper.xml | 4 ++-- .../jdbc/mybatis/mapper/DummyEntityMapper.xml | 4 ++-- .../relational/core/conversion/DbAction.java | 3 +++ ...RelationalEntityDeleteWriterUnitTests.java | 1 + ...RelationalEntityInsertWriterUnitTests.java | 1 + ...RelationalEntityUpdateWriterUnitTests.java | 3 ++- .../RelationalEntityWriterUnitTests.java | 3 ++- 14 files changed, 63 insertions(+), 28 deletions(-) diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/AggregateChangeExecutor.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/AggregateChangeExecutor.java index 0f584a07..d3947e3b 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/AggregateChangeExecutor.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/AggregateChangeExecutor.java @@ -42,6 +42,15 @@ class AggregateChangeExecutor { this.accessStrategy = accessStrategy; } + /** + * Execute an aggregate change which has a root entity. It returns the root entity, with all changes that might apply. + * This might be the original instance or a new instance, depending on its mutability. + * + * @param aggregateChange the aggregate change to be executed. Must not be {@literal null}. + * @param the type of the aggregate root. + * @return the potentially modified aggregate root. Guaranteed to be not {@literal null}. + * @since 3.0 + */ T execute(AggregateChangeWithRoot aggregateChange) { JdbcAggregateChangeExecutionContext executionContext = new JdbcAggregateChangeExecutionContext(converter, @@ -52,6 +61,13 @@ class AggregateChangeExecutor { return executionContext.populateIdsIfNecessary(); } + /** + * Execute an aggregate change without a root entity. + * + * @param aggregateChange the aggregate change to be executed. Must not be {@literal null}. + * @param the type of the aggregate root. + * @since 3.0 + */ void execute(AggregateChange aggregateChange) { JdbcAggregateChangeExecutionContext executionContext = new JdbcAggregateChangeExecutionContext(converter, diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateChangeExecutionContext.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateChangeExecutionContext.java index 930b6f89..4b8ab857 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateChangeExecutionContext.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateChangeExecutionContext.java @@ -42,6 +42,9 @@ import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** + * A container for the data required and produced by an aggregate change execution. Most importantly it holds the + * results of the various actions performed. + * * @author Jens Schauder * @author Umut Erturk * @author Myeonghyeon Lee @@ -226,9 +229,9 @@ class JdbcAggregateChangeExecutionContext { DbAction.WithEntity action = result.getAction(); Object newEntity = setIdAndCascadingProperties(action, result.getGeneratedId(), cascadingValues); - + if (action instanceof DbAction.InsertRoot || action instanceof DbAction.UpdateRoot) { - //noinspection unchecked + // noinspection unchecked return (T) newEntity; } diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/ImmutableAggregateTemplateHsqlIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/ImmutableAggregateTemplateHsqlIntegrationTests.java index 9da2eb1e..85940183 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/ImmutableAggregateTemplateHsqlIntegrationTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/ImmutableAggregateTemplateHsqlIntegrationTests.java @@ -20,6 +20,9 @@ import static org.assertj.core.api.Assertions.*; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.Value; +import lombok.With; + import org.assertj.core.api.SoftAssertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -38,14 +41,12 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.transaction.annotation.Transactional; -import lombok.Value; -import lombok.With; - /** * Integration tests for {@link JdbcAggregateTemplate} and it's handling of immutable entities. * * @author Jens Schauder * @author Salim Achouche + * @author Chirag Taylor */ @ContextConfiguration @Transactional @@ -341,8 +342,7 @@ public class ImmutableAggregateTemplateHsqlIntegrationTests { } static class WithCopyConstructor { - @Id - private final Long id; + @Id private final Long id; private final String name; WithCopyConstructor(Long id, String name) { diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateChangeExecutorContextImmutableUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateChangeExecutorContextImmutableUnitTests.java index f62de349..9195563e 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateChangeExecutorContextImmutableUnitTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateChangeExecutorContextImmutableUnitTests.java @@ -42,6 +42,12 @@ import org.springframework.data.relational.core.mapping.RelationalMappingContext import org.springframework.data.relational.core.mapping.RelationalPersistentProperty; import org.springframework.lang.Nullable; +/** + * Test for the {@link JdbcAggregateChangeExecutionContext} when operating on immutable classes. + * + * @author Jens Schauder + * @author Chirag Taylor + */ public class JdbcAggregateChangeExecutorContextImmutableUnitTests { RelationalMappingContext context = new RelationalMappingContext(); diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateChangeExecutorContextUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateChangeExecutorContextUnitTests.java index 0bff8bea..6936bb8d 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateChangeExecutorContextUnitTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateChangeExecutorContextUnitTests.java @@ -19,13 +19,13 @@ import static java.util.Collections.*; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; +import lombok.Value; + import java.util.ArrayList; import java.util.List; -import lombok.Value; import org.junit.jupiter.api.Test; import org.springframework.data.annotation.Id; -import org.springframework.data.annotation.Version; import org.springframework.data.jdbc.core.convert.BasicJdbcConverter; import org.springframework.data.jdbc.core.convert.DataAccessStrategy; import org.springframework.data.jdbc.core.convert.Identifier; @@ -174,7 +174,8 @@ public class JdbcAggregateChangeExecutorContextUnitTests { ContentImmutableId contentImmutableId = new ContentImmutableId(null); root.contentImmutableId = contentImmutableId; Identifier identifier = Identifier.empty().withPart(SqlIdentifier.quoted("DUMMY_ENTITY"), 123L, Long.class); - when(accessStrategy.insert(contentImmutableId, ContentImmutableId.class, identifier, IdValueSource.GENERATED)).thenReturn(456L); + when(accessStrategy.insert(contentImmutableId, ContentImmutableId.class, identifier, IdValueSource.GENERATED)) + .thenReturn(456L); executionContext.executeInsert(createInsert(rootInsert, "contentImmutableId", contentImmutableId, null)); DummyEntity newRoot = executionContext.populateIdsIfNecessary(); diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryBeforeSaveHsqlIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryBeforeSaveHsqlIntegrationTests.java index 516e886b..d5427db1 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryBeforeSaveHsqlIntegrationTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/JdbcRepositoryBeforeSaveHsqlIntegrationTests.java @@ -17,6 +17,11 @@ package org.springframework.data.jdbc.repository; import static org.assertj.core.api.Assertions.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Value; +import lombok.With; + import java.util.List; import org.junit.jupiter.api.Test; @@ -38,11 +43,6 @@ import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.Value; -import lombok.With; - /** * Integration tests for the {@link BeforeSaveCallback}. * @@ -153,7 +153,8 @@ public class JdbcRepositoryBeforeSaveHsqlIntegrationTests { private String name; } - private interface MutableWithImmutableIdEntityRepository extends ListCrudRepository {} + private interface MutableWithImmutableIdEntityRepository + extends ListCrudRepository {} @Data @AllArgsConstructor @@ -162,14 +163,14 @@ public class JdbcRepositoryBeforeSaveHsqlIntegrationTests { private String name; } - private interface ImmutableWithMutableIdEntityRepository extends ListCrudRepository {} + private interface ImmutableWithMutableIdEntityRepository + extends ListCrudRepository {} @Data @AllArgsConstructor static class ImmutableWithMutableIdEntity { @Id private Long id; - @With - private final String name; + @With private final String name; } @Configuration diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/ImmutableAggregateTemplateHsqlIntegrationTests-hsql.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/ImmutableAggregateTemplateHsqlIntegrationTests-hsql.sql index fba412c6..20b1a40f 100644 --- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/ImmutableAggregateTemplateHsqlIntegrationTests-hsql.sql +++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/ImmutableAggregateTemplateHsqlIntegrationTests-hsql.sql @@ -26,8 +26,8 @@ ALTER TABLE AUTHOR CREATE TABLE WITH_COPY_CONSTRUCTOR ( - ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY, - NAME VARCHAR(30) + ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY, + NAME VARCHAR(30) ); CREATE TABLE ROOT @@ -41,4 +41,5 @@ CREATE TABLE NON_ROOT ROOT BIGINT NOT NULL, NAME VARCHAR(30) ); -ALTER TABLE NON_ROOT ADD FOREIGN KEY (ROOT) REFERENCES ROOT (ID); \ No newline at end of file +ALTER TABLE NON_ROOT + ADD FOREIGN KEY (ROOT) REFERENCES ROOT (ID); \ No newline at end of file diff --git a/spring-data-jdbc/src/test/resources/org/springframework/data/jdbc/mybatis/DummyEntityMapper.xml b/spring-data-jdbc/src/test/resources/org/springframework/data/jdbc/mybatis/DummyEntityMapper.xml index a123b05a..a2a7f709 100644 --- a/spring-data-jdbc/src/test/resources/org/springframework/data/jdbc/mybatis/DummyEntityMapper.xml +++ b/spring-data-jdbc/src/test/resources/org/springframework/data/jdbc/mybatis/DummyEntityMapper.xml @@ -14,8 +14,8 @@ diff --git a/spring-data-jdbc/src/test/resources/org/springframework/data/jdbc/mybatis/mapper/DummyEntityMapper.xml b/spring-data-jdbc/src/test/resources/org/springframework/data/jdbc/mybatis/mapper/DummyEntityMapper.xml index 5b125301..c12b09f1 100644 --- a/spring-data-jdbc/src/test/resources/org/springframework/data/jdbc/mybatis/mapper/DummyEntityMapper.xml +++ b/spring-data-jdbc/src/test/resources/org/springframework/data/jdbc/mybatis/mapper/DummyEntityMapper.xml @@ -14,8 +14,8 @@ diff --git a/spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/DbAction.java b/spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/DbAction.java index 1d340c25..d9de7205 100644 --- a/spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/DbAction.java +++ b/spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/DbAction.java @@ -209,6 +209,7 @@ public interface DbAction { * Note that deletes for contained entities that reference the root are to be represented by separate * {@link DbAction}s. *

+ * * @param type of the entity for which this represents a database interaction. */ final class DeleteRoot implements DbAction { @@ -273,6 +274,7 @@ public interface DbAction { * Note that deletes for contained entities that reference the root are to be represented by separate * {@link DbAction}s. *

+ * * @param type of the entity for which this represents a database interaction. */ final class DeleteAllRoot implements DbAction { @@ -399,6 +401,7 @@ public interface DbAction { *

* Values come from parent entities but one might also add values manually. *

+ * * @return guaranteed to be not {@code null}. */ Map, Object> getQualifiers(); diff --git a/spring-data-relational/src/test/java/org/springframework/data/relational/core/conversion/RelationalEntityDeleteWriterUnitTests.java b/spring-data-relational/src/test/java/org/springframework/data/relational/core/conversion/RelationalEntityDeleteWriterUnitTests.java index e2d6bd3a..c7c2b025 100644 --- a/spring-data-relational/src/test/java/org/springframework/data/relational/core/conversion/RelationalEntityDeleteWriterUnitTests.java +++ b/spring-data-relational/src/test/java/org/springframework/data/relational/core/conversion/RelationalEntityDeleteWriterUnitTests.java @@ -39,6 +39,7 @@ import org.springframework.data.relational.core.mapping.RelationalMappingContext * * @author Jens Schauder * @author Myeonghyeon Lee + * @author Chirag Taylor */ @ExtendWith(MockitoExtension.class) public class RelationalEntityDeleteWriterUnitTests { diff --git a/spring-data-relational/src/test/java/org/springframework/data/relational/core/conversion/RelationalEntityInsertWriterUnitTests.java b/spring-data-relational/src/test/java/org/springframework/data/relational/core/conversion/RelationalEntityInsertWriterUnitTests.java index bfba7e0e..d0e483ec 100644 --- a/spring-data-relational/src/test/java/org/springframework/data/relational/core/conversion/RelationalEntityInsertWriterUnitTests.java +++ b/spring-data-relational/src/test/java/org/springframework/data/relational/core/conversion/RelationalEntityInsertWriterUnitTests.java @@ -33,6 +33,7 @@ import org.springframework.data.relational.core.mapping.RelationalMappingContext * Unit tests for the {@link RelationalEntityInsertWriter} * * @author Thomas Lang + * @author Chirag Taylor */ @ExtendWith(MockitoExtension.class) public class RelationalEntityInsertWriterUnitTests { diff --git a/spring-data-relational/src/test/java/org/springframework/data/relational/core/conversion/RelationalEntityUpdateWriterUnitTests.java b/spring-data-relational/src/test/java/org/springframework/data/relational/core/conversion/RelationalEntityUpdateWriterUnitTests.java index a7e0342f..516688a6 100644 --- a/spring-data-relational/src/test/java/org/springframework/data/relational/core/conversion/RelationalEntityUpdateWriterUnitTests.java +++ b/spring-data-relational/src/test/java/org/springframework/data/relational/core/conversion/RelationalEntityUpdateWriterUnitTests.java @@ -33,12 +33,13 @@ import org.springframework.data.relational.core.mapping.RelationalMappingContext * * @author Thomas Lang * @author Myeonghyeon Lee + * @author Chirag Taylor */ @ExtendWith(MockitoExtension.class) public class RelationalEntityUpdateWriterUnitTests { public static final long SOME_ENTITY_ID = 23L; - private RelationalMappingContext context = new RelationalMappingContext(); + private final RelationalMappingContext context = new RelationalMappingContext(); @Test // DATAJDBC-112 public void existingEntityGetsConvertedToDeletePlusUpdate() { diff --git a/spring-data-relational/src/test/java/org/springframework/data/relational/core/conversion/RelationalEntityWriterUnitTests.java b/spring-data-relational/src/test/java/org/springframework/data/relational/core/conversion/RelationalEntityWriterUnitTests.java index 18b709c4..8405479a 100644 --- a/spring-data-relational/src/test/java/org/springframework/data/relational/core/conversion/RelationalEntityWriterUnitTests.java +++ b/spring-data-relational/src/test/java/org/springframework/data/relational/core/conversion/RelationalEntityWriterUnitTests.java @@ -669,7 +669,8 @@ public class RelationalEntityWriterUnitTests { listMapContainer.maps.add(new NoIdMapContainer()); listMapContainer.maps.get(0).elements.put("one", new NoIdElement()); - AggregateChangeWithRoot aggregateChange = MutableAggregateChange.forSave(listMapContainer, 1L); + AggregateChangeWithRoot aggregateChange = MutableAggregateChange.forSave(listMapContainer, + 1L); new RelationalEntityWriter(context).write(listMapContainer, aggregateChange);