Skip to content

Commit e26f664

Browse files
myatminschauder
authored andcommitted
DATAJDBC-349 - Adds a unit test for the changes.
Original pull request: #242.
1 parent dc535e9 commit e26f664

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/DefaultDataAccessStrategyUnitTests.java

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@
2424
import lombok.Data;
2525
import lombok.RequiredArgsConstructor;
2626

27+
import java.util.ArrayList;
2728
import java.util.Arrays;
2829
import java.util.HashMap;
30+
import java.util.List;
2931

3032
import lombok.Value;
3133
import org.junit.Before;
@@ -37,11 +39,14 @@
3739
import org.springframework.data.convert.ReadingConverter;
3840
import org.springframework.data.convert.WritingConverter;
3941
import org.springframework.data.jdbc.core.mapping.JdbcMappingContext;
42+
import org.springframework.data.mapping.PersistentPropertyPath;
4043
import org.springframework.data.relational.core.dialect.Dialect;
4144
import org.springframework.data.relational.core.dialect.HsqlDbDialect;
4245
import org.springframework.data.relational.core.mapping.RelationalMappingContext;
46+
import org.springframework.data.relational.core.mapping.RelationalPersistentProperty;
4347
import org.springframework.data.relational.core.sql.SqlIdentifier;
4448
import org.springframework.jdbc.core.JdbcOperations;
49+
import org.springframework.jdbc.core.RowMapper;
4550
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations;
4651
import org.springframework.jdbc.core.namedparam.SqlParameterSource;
4752
import org.springframework.jdbc.support.KeyHolder;
@@ -52,6 +57,7 @@
5257
* @author Jens Schauder
5358
* @author Mark Paluch
5459
* @author Myeonghyeon Lee
60+
* @author Myat Min
5561
*/
5662
public class DefaultDataAccessStrategyUnitTests {
5763

@@ -181,12 +187,64 @@ public void considersConfiguredWriteConverterForIdValueObjects() {
181187
assertThat(paramSourceCaptor.getValue().getValue("id")).isEqualTo(rawId);
182188
}
183189

190+
@Test // DATAJDBC-587
191+
public void considersConfiguredWriteConverterForIdValueObjectsWhichReferencedInOneToManyRelationship() {
192+
193+
DelegatingDataAccessStrategy relationResolver = new DelegatingDataAccessStrategy();
194+
195+
Dialect dialect = HsqlDbDialect.INSTANCE;
196+
197+
JdbcConverter converter = new BasicJdbcConverter(context, relationResolver,
198+
new JdbcCustomConversions(Arrays.asList(IdValueToStringConverter.INSTANCE)),
199+
new DefaultJdbcTypeFactory(jdbcOperations), dialect.getIdentifierProcessing());
200+
201+
DefaultDataAccessStrategy accessStrategy = new DefaultDataAccessStrategy( //
202+
new SqlGeneratorSource(context, converter, dialect), //
203+
context, //
204+
converter, //
205+
namedJdbcOperations);
206+
207+
relationResolver.setDelegate(accessStrategy);
208+
209+
String rawId = "batman";
210+
IdValue rootIdValue = new IdValue(rawId);
211+
212+
DummyEntityRoot root = new DummyEntityRoot(rootIdValue);
213+
DummyEntity child = new DummyEntity(ORIGINAL_ID);
214+
root.dummyEntities.add(child);
215+
216+
additionalParameters.put(SqlIdentifier.quoted("DUMMYENTITYROOT"), rootIdValue);
217+
accessStrategy.insert(root, DummyEntityRoot.class, Identifier.from(additionalParameters));
218+
219+
verify(namedJdbcOperations).update(anyString(), paramSourceCaptor.capture(),
220+
any(KeyHolder.class));
221+
222+
assertThat(paramSourceCaptor.getValue().getValue("id")).isEqualTo(rawId);
223+
224+
PersistentPropertyPath<RelationalPersistentProperty> path =
225+
context.getPersistentPropertyPath("dummyEntities", DummyEntityRoot.class);
226+
227+
accessStrategy.findAllByPath(Identifier.from(additionalParameters), path);
228+
229+
verify(namedJdbcOperations).query(anyString(), paramSourceCaptor.capture(),
230+
any(RowMapper.class));
231+
232+
assertThat(paramSourceCaptor.getValue().getValue("DUMMYENTITYROOT")).isEqualTo(rawId);
233+
}
234+
184235
@RequiredArgsConstructor
185236
private static class DummyEntity {
186237

187238
@Id private final Long id;
188239
}
189240

241+
@RequiredArgsConstructor // DATAJDBC-587
242+
private static class DummyEntityRoot {
243+
244+
@Id private final IdValue id;
245+
List<DummyEntity> dummyEntities = new ArrayList<>();
246+
}
247+
190248
@AllArgsConstructor
191249
private static class EntityWithBoolean {
192250

0 commit comments

Comments
 (0)