From e26f6647da07f69aa95ca0c4321de4167826d868 Mon Sep 17 00:00:00 2001 From: Myat Min Date: Fri, 31 Jul 2020 11:56:19 +0800 Subject: [PATCH] DATAJDBC-349 - Adds a unit test for the changes. Original pull request: #242. --- .../DefaultDataAccessStrategyUnitTests.java | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/DefaultDataAccessStrategyUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/DefaultDataAccessStrategyUnitTests.java index 42cdf1282..1da8dae8c 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/DefaultDataAccessStrategyUnitTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/DefaultDataAccessStrategyUnitTests.java @@ -24,8 +24,10 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.RequiredArgsConstructor; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.List; import lombok.Value; import org.junit.Before; @@ -37,11 +39,14 @@ import org.springframework.data.annotation.Id; import org.springframework.data.convert.ReadingConverter; import org.springframework.data.convert.WritingConverter; import org.springframework.data.jdbc.core.mapping.JdbcMappingContext; +import org.springframework.data.mapping.PersistentPropertyPath; import org.springframework.data.relational.core.dialect.Dialect; import org.springframework.data.relational.core.dialect.HsqlDbDialect; import org.springframework.data.relational.core.mapping.RelationalMappingContext; +import org.springframework.data.relational.core.mapping.RelationalPersistentProperty; import org.springframework.data.relational.core.sql.SqlIdentifier; import org.springframework.jdbc.core.JdbcOperations; +import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; import org.springframework.jdbc.core.namedparam.SqlParameterSource; import org.springframework.jdbc.support.KeyHolder; @@ -52,6 +57,7 @@ import org.springframework.jdbc.support.KeyHolder; * @author Jens Schauder * @author Mark Paluch * @author Myeonghyeon Lee + * @author Myat Min */ public class DefaultDataAccessStrategyUnitTests { @@ -181,12 +187,64 @@ public class DefaultDataAccessStrategyUnitTests { assertThat(paramSourceCaptor.getValue().getValue("id")).isEqualTo(rawId); } + @Test // DATAJDBC-587 + public void considersConfiguredWriteConverterForIdValueObjectsWhichReferencedInOneToManyRelationship() { + + DelegatingDataAccessStrategy relationResolver = new DelegatingDataAccessStrategy(); + + Dialect dialect = HsqlDbDialect.INSTANCE; + + JdbcConverter converter = new BasicJdbcConverter(context, relationResolver, + new JdbcCustomConversions(Arrays.asList(IdValueToStringConverter.INSTANCE)), + new DefaultJdbcTypeFactory(jdbcOperations), dialect.getIdentifierProcessing()); + + DefaultDataAccessStrategy accessStrategy = new DefaultDataAccessStrategy( // + new SqlGeneratorSource(context, converter, dialect), // + context, // + converter, // + namedJdbcOperations); + + relationResolver.setDelegate(accessStrategy); + + String rawId = "batman"; + IdValue rootIdValue = new IdValue(rawId); + + DummyEntityRoot root = new DummyEntityRoot(rootIdValue); + DummyEntity child = new DummyEntity(ORIGINAL_ID); + root.dummyEntities.add(child); + + additionalParameters.put(SqlIdentifier.quoted("DUMMYENTITYROOT"), rootIdValue); + accessStrategy.insert(root, DummyEntityRoot.class, Identifier.from(additionalParameters)); + + verify(namedJdbcOperations).update(anyString(), paramSourceCaptor.capture(), + any(KeyHolder.class)); + + assertThat(paramSourceCaptor.getValue().getValue("id")).isEqualTo(rawId); + + PersistentPropertyPath path = + context.getPersistentPropertyPath("dummyEntities", DummyEntityRoot.class); + + accessStrategy.findAllByPath(Identifier.from(additionalParameters), path); + + verify(namedJdbcOperations).query(anyString(), paramSourceCaptor.capture(), + any(RowMapper.class)); + + assertThat(paramSourceCaptor.getValue().getValue("DUMMYENTITYROOT")).isEqualTo(rawId); + } + @RequiredArgsConstructor private static class DummyEntity { @Id private final Long id; } + @RequiredArgsConstructor // DATAJDBC-587 + private static class DummyEntityRoot { + + @Id private final IdValue id; + List dummyEntities = new ArrayList<>(); + } + @AllArgsConstructor private static class EntityWithBoolean {