Browse Source

Add conversion capabilities to the entity instantiator.

Closes #1646
pull/1659/head
Jens Schauder 2 years ago
parent
commit
6736d8334e
No known key found for this signature in database
GPG Key ID: 9537B67540F0A581
  1. 17
      spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/AbstractJdbcAggregateTemplateIntegrationTests.java
  2. 14
      spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-db2.sql
  3. 11
      spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-h2.sql
  4. 11
      spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-hsql.sql
  5. 11
      spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mariadb.sql
  6. 14
      spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mssql.sql
  7. 11
      spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mysql.sql
  8. 14
      spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-oracle.sql
  9. 14
      spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-postgres.sql
  10. 2
      spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/MappingRelationalConverter.java

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

@ -1268,6 +1268,16 @@ abstract class AbstractJdbcAggregateTemplateIntegrationTests { @@ -1268,6 +1268,16 @@ abstract class AbstractJdbcAggregateTemplateIntegrationTests {
assertThat(reloaded.mapElements.get("delta")).isEqualTo(new MapElement("four"));
}
@Test // GH-1646
void recordOfSet() {
Author tolkien = template.save(new Author(null, Set.of(new Book("Lord of the Rings"))));
Iterable<Author> authors = template.findAll(Author.class);
assertThat(authors).containsExactly(tolkien);
}
private <T extends Number> void saveAndUpdateAggregateWithVersion(VersionedAggregate aggregate,
Function<Number, T> toConcreteNumber) {
saveAndUpdateAggregateWithVersion(aggregate, toConcreteNumber, 0);
@ -2079,6 +2089,13 @@ abstract class AbstractJdbcAggregateTemplateIntegrationTests { @@ -2079,6 +2089,13 @@ abstract class AbstractJdbcAggregateTemplateIntegrationTests {
record MapElement(String name) {
}
record Author(@Id Long id, Set<Book> books) {
}
record Book(String name) {
}
@Configuration
@Import(TestConfiguration.class)
static class Config {

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

@ -47,6 +47,9 @@ DROP TABLE MAP_ELEMENT; @@ -47,6 +47,9 @@ DROP TABLE MAP_ELEMENT;
DROP TABLE LIST_ELEMENT;
DROP TABLE SET_ELEMENT;
DROP TABLE BOOK;
DROP TABLE AUTHOR;
CREATE TABLE LEGO_SET
(
"id1" BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY,
@ -405,3 +408,14 @@ CREATE TABLE MAP_ELEMENT @@ -405,3 +408,14 @@ CREATE TABLE MAP_ELEMENT
MULTIPLE_COLLECTIONS_KEY VARCHAR(10),
NAME VARCHAR(100)
);
CREATE TABLE AUTHOR
(
ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY
);
CREATE TABLE BOOK
(
AUTHOR BIGINT,
NAME VARCHAR(100)
);

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

@ -367,3 +367,14 @@ CREATE TABLE MAP_ELEMENT @@ -367,3 +367,14 @@ CREATE TABLE MAP_ELEMENT
MULTIPLE_COLLECTIONS_KEY VARCHAR(10),
NAME VARCHAR(100)
);
CREATE TABLE AUTHOR
(
ID SERIAL PRIMARY KEY
);
CREATE TABLE BOOK
(
AUTHOR BIGINT,
NAME VARCHAR(100)
);

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

@ -368,3 +368,14 @@ CREATE TABLE MAP_ELEMENT @@ -368,3 +368,14 @@ CREATE TABLE MAP_ELEMENT
MULTIPLE_COLLECTIONS_KEY VARCHAR(10),
NAME VARCHAR(100)
);
CREATE TABLE AUTHOR
(
ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY
);
CREATE TABLE BOOK
(
AUTHOR BIGINT,
NAME VARCHAR(100)
);

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

@ -341,3 +341,14 @@ CREATE TABLE MAP_ELEMENT @@ -341,3 +341,14 @@ CREATE TABLE MAP_ELEMENT
MULTIPLE_COLLECTIONS_KEY VARCHAR(10),
NAME VARCHAR(100)
);
CREATE TABLE AUTHOR
(
ID BIGINT AUTO_INCREMENT PRIMARY KEY
);
CREATE TABLE BOOK
(
AUTHOR BIGINT,
NAME VARCHAR(100)
);

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

@ -379,3 +379,17 @@ CREATE TABLE MAP_ELEMENT @@ -379,3 +379,17 @@ CREATE TABLE MAP_ELEMENT
MULTIPLE_COLLECTIONS_KEY VARCHAR(10),
NAME VARCHAR(100)
);
DROP TABLE BOOK;
DROP TABLE AUTHOR;
CREATE TABLE AUTHOR
(
ID BIGINT IDENTITY PRIMARY KEY
);
CREATE TABLE BOOK
(
AUTHOR BIGINT,
NAME VARCHAR(100)
);

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

@ -346,3 +346,14 @@ CREATE TABLE MAP_ELEMENT @@ -346,3 +346,14 @@ CREATE TABLE MAP_ELEMENT
MULTIPLE_COLLECTIONS_KEY VARCHAR(10),
NAME VARCHAR(100)
);
CREATE TABLE AUTHOR
(
ID BIGINT AUTO_INCREMENT PRIMARY KEY
);
CREATE TABLE BOOK
(
AUTHOR BIGINT,
NAME VARCHAR(100)
);

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

@ -37,6 +37,9 @@ DROP TABLE MAP_ELEMENT CASCADE CONSTRAINTS PURGE; @@ -37,6 +37,9 @@ DROP TABLE MAP_ELEMENT CASCADE CONSTRAINTS PURGE;
DROP TABLE LIST_ELEMENT CASCADE CONSTRAINTS PURGE;
DROP TABLE SET_ELEMENT CASCADE CONSTRAINTS PURGE;
DROP TABLE BOOK CASCADE CONSTRAINTS PURGE;
DROP TABLE AUTHOR CASCADE CONSTRAINTS PURGE;
CREATE TABLE LEGO_SET
(
"id1" NUMBER GENERATED by default on null as IDENTITY PRIMARY KEY,
@ -386,3 +389,14 @@ CREATE TABLE MAP_ELEMENT @@ -386,3 +389,14 @@ CREATE TABLE MAP_ELEMENT
MULTIPLE_COLLECTIONS_KEY VARCHAR(10),
NAME VARCHAR(100)
);
CREATE TABLE AUTHOR
(
ID NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY
);
CREATE TABLE BOOK
(
AUTHOR NUMBER,
NAME VARCHAR(100)
);

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

@ -40,6 +40,9 @@ DROP TABLE MAP_ELEMENT; @@ -40,6 +40,9 @@ DROP TABLE MAP_ELEMENT;
DROP TABLE LIST_ELEMENT;
DROP TABLE SET_ELEMENT;
DROP TABLE BOOK;
DROP TABLE AUTHOR;
CREATE TABLE LEGO_SET
(
"id1" SERIAL PRIMARY KEY,
@ -408,3 +411,14 @@ CREATE TABLE MAP_ELEMENT @@ -408,3 +411,14 @@ CREATE TABLE MAP_ELEMENT
MULTIPLE_COLLECTIONS_KEY VARCHAR(10),
NAME VARCHAR(100)
);
CREATE TABLE AUTHOR
(
ID SERIAL PRIMARY KEY
);
CREATE TABLE BOOK
(
AUTHOR BIGINT,
NAME VARCHAR(100)
);

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

@ -504,7 +504,7 @@ public class MappingRelationalConverter extends AbstractRelationalConverter impl @@ -504,7 +504,7 @@ public class MappingRelationalConverter extends AbstractRelationalConverter impl
entity, contextualizing, context.getPath().getCurrentObject());
return new ConverterAwareSpELExpressionParameterValueProvider(context, evaluator, getConversionService(),
parameterProvider);
new ConvertingParameterValueProvider<>( parameterProvider::getParameterValue));
}
private <S> S populateProperties(ConversionContext context, RelationalPersistentEntity<S> entity,

Loading…
Cancel
Save