Skip to content

Commit 6736d83

Browse files
committed
Add conversion capabilities to the entity instantiator.
Closes #1646
1 parent 778d368 commit 6736d83

10 files changed

+118
-1
lines changed

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

+17
Original file line numberDiff line numberDiff line change
@@ -1268,6 +1268,16 @@ void multipleCollectionsWithEmptyList() {
12681268
assertThat(reloaded.mapElements.get("delta")).isEqualTo(new MapElement("four"));
12691269
}
12701270

1271+
@Test // GH-1646
1272+
void recordOfSet() {
1273+
1274+
Author tolkien = template.save(new Author(null, Set.of(new Book("Lord of the Rings"))));
1275+
1276+
Iterable<Author> authors = template.findAll(Author.class);
1277+
1278+
assertThat(authors).containsExactly(tolkien);
1279+
}
1280+
12711281
private <T extends Number> void saveAndUpdateAggregateWithVersion(VersionedAggregate aggregate,
12721282
Function<Number, T> toConcreteNumber) {
12731283
saveAndUpdateAggregateWithVersion(aggregate, toConcreteNumber, 0);
@@ -2079,6 +2089,13 @@ record SetElement(String name) {
20792089
record MapElement(String name) {
20802090
}
20812091

2092+
record Author(@Id Long id, Set<Book> books) {
2093+
}
2094+
2095+
record Book(String name) {
2096+
2097+
}
2098+
20822099
@Configuration
20832100
@Import(TestConfiguration.class)
20842101
static class Config {

spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-db2.sql

+14
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ DROP TABLE MAP_ELEMENT;
4747
DROP TABLE LIST_ELEMENT;
4848
DROP TABLE SET_ELEMENT;
4949

50+
DROP TABLE BOOK;
51+
DROP TABLE AUTHOR;
52+
5053
CREATE TABLE LEGO_SET
5154
(
5255
"id1" BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY,
@@ -405,3 +408,14 @@ CREATE TABLE MAP_ELEMENT
405408
MULTIPLE_COLLECTIONS_KEY VARCHAR(10),
406409
NAME VARCHAR(100)
407410
);
411+
412+
CREATE TABLE AUTHOR
413+
(
414+
ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY
415+
);
416+
417+
CREATE TABLE BOOK
418+
(
419+
AUTHOR BIGINT,
420+
NAME VARCHAR(100)
421+
);

spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-h2.sql

+11
Original file line numberDiff line numberDiff line change
@@ -367,3 +367,14 @@ CREATE TABLE MAP_ELEMENT
367367
MULTIPLE_COLLECTIONS_KEY VARCHAR(10),
368368
NAME VARCHAR(100)
369369
);
370+
371+
CREATE TABLE AUTHOR
372+
(
373+
ID SERIAL PRIMARY KEY
374+
);
375+
376+
CREATE TABLE BOOK
377+
(
378+
AUTHOR BIGINT,
379+
NAME VARCHAR(100)
380+
);

spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-hsql.sql

+11
Original file line numberDiff line numberDiff line change
@@ -368,3 +368,14 @@ CREATE TABLE MAP_ELEMENT
368368
MULTIPLE_COLLECTIONS_KEY VARCHAR(10),
369369
NAME VARCHAR(100)
370370
);
371+
372+
CREATE TABLE AUTHOR
373+
(
374+
ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY
375+
);
376+
377+
CREATE TABLE BOOK
378+
(
379+
AUTHOR BIGINT,
380+
NAME VARCHAR(100)
381+
);

spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mariadb.sql

+11
Original file line numberDiff line numberDiff line change
@@ -341,3 +341,14 @@ CREATE TABLE MAP_ELEMENT
341341
MULTIPLE_COLLECTIONS_KEY VARCHAR(10),
342342
NAME VARCHAR(100)
343343
);
344+
345+
CREATE TABLE AUTHOR
346+
(
347+
ID BIGINT AUTO_INCREMENT PRIMARY KEY
348+
);
349+
350+
CREATE TABLE BOOK
351+
(
352+
AUTHOR BIGINT,
353+
NAME VARCHAR(100)
354+
);

spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mssql.sql

+14
Original file line numberDiff line numberDiff line change
@@ -379,3 +379,17 @@ CREATE TABLE MAP_ELEMENT
379379
MULTIPLE_COLLECTIONS_KEY VARCHAR(10),
380380
NAME VARCHAR(100)
381381
);
382+
383+
DROP TABLE BOOK;
384+
DROP TABLE AUTHOR;
385+
386+
CREATE TABLE AUTHOR
387+
(
388+
ID BIGINT IDENTITY PRIMARY KEY
389+
);
390+
391+
CREATE TABLE BOOK
392+
(
393+
AUTHOR BIGINT,
394+
NAME VARCHAR(100)
395+
);

spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mysql.sql

+11
Original file line numberDiff line numberDiff line change
@@ -346,3 +346,14 @@ CREATE TABLE MAP_ELEMENT
346346
MULTIPLE_COLLECTIONS_KEY VARCHAR(10),
347347
NAME VARCHAR(100)
348348
);
349+
350+
CREATE TABLE AUTHOR
351+
(
352+
ID BIGINT AUTO_INCREMENT PRIMARY KEY
353+
);
354+
355+
CREATE TABLE BOOK
356+
(
357+
AUTHOR BIGINT,
358+
NAME VARCHAR(100)
359+
);

spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-oracle.sql

+14
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ DROP TABLE MAP_ELEMENT CASCADE CONSTRAINTS PURGE;
3737
DROP TABLE LIST_ELEMENT CASCADE CONSTRAINTS PURGE;
3838
DROP TABLE SET_ELEMENT CASCADE CONSTRAINTS PURGE;
3939

40+
DROP TABLE BOOK CASCADE CONSTRAINTS PURGE;
41+
DROP TABLE AUTHOR CASCADE CONSTRAINTS PURGE;
42+
4043
CREATE TABLE LEGO_SET
4144
(
4245
"id1" NUMBER GENERATED by default on null as IDENTITY PRIMARY KEY,
@@ -386,3 +389,14 @@ CREATE TABLE MAP_ELEMENT
386389
MULTIPLE_COLLECTIONS_KEY VARCHAR(10),
387390
NAME VARCHAR(100)
388391
);
392+
393+
CREATE TABLE AUTHOR
394+
(
395+
ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY
396+
);
397+
398+
CREATE TABLE BOOK
399+
(
400+
AUTHOR NUMBER,
401+
NAME VARCHAR(100)
402+
);

spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-postgres.sql

+14
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ DROP TABLE MAP_ELEMENT;
4040
DROP TABLE LIST_ELEMENT;
4141
DROP TABLE SET_ELEMENT;
4242

43+
DROP TABLE BOOK;
44+
DROP TABLE AUTHOR;
45+
4346
CREATE TABLE LEGO_SET
4447
(
4548
"id1" SERIAL PRIMARY KEY,
@@ -408,3 +411,14 @@ CREATE TABLE MAP_ELEMENT
408411
MULTIPLE_COLLECTIONS_KEY VARCHAR(10),
409412
NAME VARCHAR(100)
410413
);
414+
415+
CREATE TABLE AUTHOR
416+
(
417+
ID SERIAL PRIMARY KEY
418+
);
419+
420+
CREATE TABLE BOOK
421+
(
422+
AUTHOR BIGINT,
423+
NAME VARCHAR(100)
424+
);

spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/MappingRelationalConverter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,7 @@ public RelationalPropertyValueProvider withContext(ConversionContext context) {
504504
entity, contextualizing, context.getPath().getCurrentObject());
505505

506506
return new ConverterAwareSpELExpressionParameterValueProvider(context, evaluator, getConversionService(),
507-
parameterProvider);
507+
new ConvertingParameterValueProvider<>( parameterProvider::getParameterValue));
508508
}
509509

510510
private <S> S populateProperties(ConversionContext context, RelationalPersistentEntity<S> entity,

0 commit comments

Comments
 (0)