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);