diff --git a/pom.xml b/pom.xml
index 02461b8e40..d56c5d3837 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-relational-parent
- 3.3.0-SNAPSHOT
+ 3.3.0-1684-converter-not-found-SNAPSHOT
pom
Spring Data Relational Parent
diff --git a/spring-data-jdbc-distribution/pom.xml b/spring-data-jdbc-distribution/pom.xml
index 8d987fb028..13e0b0de7c 100644
--- a/spring-data-jdbc-distribution/pom.xml
+++ b/spring-data-jdbc-distribution/pom.xml
@@ -14,7 +14,7 @@
org.springframework.data
spring-data-relational-parent
- 3.3.0-SNAPSHOT
+ 3.3.0-1684-converter-not-found-SNAPSHOT
../pom.xml
diff --git a/spring-data-jdbc/pom.xml b/spring-data-jdbc/pom.xml
index fddbaab696..7bb803e8e1 100644
--- a/spring-data-jdbc/pom.xml
+++ b/spring-data-jdbc/pom.xml
@@ -6,7 +6,7 @@
4.0.0
spring-data-jdbc
- 3.3.0-SNAPSHOT
+ 3.3.0-1684-converter-not-found-SNAPSHOT
Spring Data JDBC
Spring Data module for JDBC repositories.
@@ -15,7 +15,7 @@
org.springframework.data
spring-data-relational-parent
- 3.3.0-SNAPSHOT
+ 3.3.0-1684-converter-not-found-SNAPSHOT
diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/MappingJdbcConverter.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/MappingJdbcConverter.java
index 746fd3664e..75c5d4c9af 100644
--- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/MappingJdbcConverter.java
+++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/MappingJdbcConverter.java
@@ -327,7 +327,7 @@ private ResolvingRelationalPropertyValueProvider(AggregatePathValueProvider dele
this.accessor = accessor;
this.context = context;
this.identifier = path.isEntity()
- ? potentiallyAppendIdentifier(identifier, path.getRequiredLeafEntity(), delegate::getPropertyValue)
+ ? potentiallyAppendIdentifier(identifier, path.getRequiredLeafEntity(), property -> delegate.getValue(path.append(property)))
: identifier;
}
diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/AbstractJdbcAggregateTemplateIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/AbstractJdbcAggregateTemplateIntegrationTests.java
index 7ccf063687..c7ac9275ab 100644
--- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/AbstractJdbcAggregateTemplateIntegrationTests.java
+++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/AbstractJdbcAggregateTemplateIntegrationTests.java
@@ -1265,6 +1265,16 @@ void mapWithEnumKey() {
assertThat(enumMapOwners).containsExactly(enumMapOwner);
}
+ @Test // GH-1684
+ void oneToOneWithIdenticalIdColumnName(){
+
+ WithOneToOne saved = template.insert(new WithOneToOne("one", new Referenced(23L)));
+
+ WithOneToOne reloaded = template.findById(saved.id, WithOneToOne.class);
+
+ assertThat(reloaded).isEqualTo(saved);
+ }
+
private void saveAndUpdateAggregateWithVersion(VersionedAggregate aggregate,
Function toConcreteNumber) {
saveAndUpdateAggregateWithVersion(aggregate, toConcreteNumber, 0);
@@ -2086,6 +2096,10 @@ record Book(String name) {
record EnumMapOwner(@Id Long id, String name, Map map) {
}
+ record WithOneToOne(@Id String id,@MappedCollection(idColumn = "renamed") Referenced referenced){}
+
+ record Referenced(@Id Long id) {
+ }
@Configuration
@Import(TestConfiguration.class)
diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/MappingJdbcConverterUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/MappingJdbcConverterUnitTests.java
index 69ef266a78..c56f6d41ab 100644
--- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/MappingJdbcConverterUnitTests.java
+++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/MappingJdbcConverterUnitTests.java
@@ -30,6 +30,7 @@
import java.time.ZonedDateTime;
import java.util.Date;
import java.util.List;
+import java.util.Map;
import java.util.UUID;
import org.assertj.core.api.SoftAssertions;
@@ -39,8 +40,10 @@
import org.springframework.data.jdbc.core.mapping.JdbcMappingContext;
import org.springframework.data.jdbc.core.mapping.JdbcValue;
import org.springframework.data.jdbc.support.JdbcUtil;
+import org.springframework.data.relational.core.mapping.MappedCollection;
import org.springframework.data.relational.core.mapping.RelationalPersistentEntity;
import org.springframework.data.relational.core.mapping.RelationalPersistentProperty;
+import org.springframework.data.relational.domain.RowDocument;
import org.springframework.data.util.TypeInformation;
/**
@@ -139,6 +142,17 @@ void conversionOfPrimitiveArrays() {
assertThat(typeFactory.arraySource).containsExactly(1, 2, 3, 4, 5);
}
+ @Test // GH-1684
+ void accessesCorrectValuesForOneToOneRelationshipWithIdenticallyNamedIdProperties() {
+
+ RowDocument rowdocument = new RowDocument(Map.of("ID", "one", "REFERENCED_ID", 23));
+
+ WithOneToOne result = converter.readAndResolve(WithOneToOne.class, rowdocument);
+
+ assertThat(result).isEqualTo(new WithOneToOne("one", new Referenced(23L)));
+ }
+
+
private void checkConversionToTimestampAndBack(SoftAssertions softly, RelationalPersistentEntity> persistentEntity,
String propertyName, Object value) {
@@ -284,4 +298,10 @@ public Array createArray(Object[] value) {
return mock(Array.class);
}
}
+
+ record WithOneToOne(@Id String id,@MappedCollection(idColumn = "renamed") Referenced referenced){}
+
+ record Referenced(@Id Long id) {
+ }
+
}
diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-db2.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-db2.sql
index f548340523..52e70b178e 100644
--- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-db2.sql
+++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-db2.sql
@@ -52,6 +52,10 @@ DROP TABLE AUTHOR;
DROP TABLE ENUM_MAP_OWNER;
+DROP TABLE REFERENCED;
+DROP TABLE WITH_ONE_TO_ONE;
+
+
CREATE TABLE LEGO_SET
(
"id1" BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY,
@@ -428,4 +432,15 @@ CREATE TABLE ENUM_MAP_OWNER
(
ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY,
NAME VARCHAR(100)
-);
\ No newline at end of file
+);
+
+CREATE TABLE WITH_ONE_TO_ONE
+(
+ ID VARCHAR(100)
+);
+
+CREATE TABLE REFERENCED
+(
+ "renamed" VARCHAR(100),
+ ID BIGINT
+);
diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-h2.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-h2.sql
index 982b9e3163..7a87c5df23 100644
--- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-h2.sql
+++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-h2.sql
@@ -385,4 +385,15 @@ CREATE TABLE ENUM_MAP_OWNER
(
ID SERIAL PRIMARY KEY,
NAME VARCHAR(100)
-);
\ No newline at end of file
+);
+
+CREATE TABLE WITH_ONE_TO_ONE
+(
+ ID VARCHAR(100)
+);
+
+CREATE TABLE REFERENCED
+(
+ "renamed" VARCHAR(100),
+ ID BIGINT
+);
diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-hsql.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-hsql.sql
index 3ae51989a5..054f8a171c 100644
--- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-hsql.sql
+++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-hsql.sql
@@ -387,3 +387,15 @@ CREATE TABLE ENUM_MAP_OWNER
ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY,
NAME VARCHAR(100)
);
+
+
+CREATE TABLE WITH_ONE_TO_ONE
+(
+ ID VARCHAR(100)
+);
+
+CREATE TABLE REFERENCED
+(
+ "renamed" VARCHAR(100),
+ ID BIGINT
+);
diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mariadb.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mariadb.sql
index 5e318e222f..52f57d5472 100644
--- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mariadb.sql
+++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mariadb.sql
@@ -359,4 +359,15 @@ CREATE TABLE ENUM_MAP_OWNER
(
ID BIGINT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(100)
-);
\ No newline at end of file
+);
+
+CREATE TABLE WITH_ONE_TO_ONE
+(
+ ID VARCHAR(100)
+);
+
+CREATE TABLE REFERENCED
+(
+ `renamed` VARCHAR(100),
+ ID BIGINT
+);
diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mssql.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mssql.sql
index 8323608b80..c623581f82 100644
--- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mssql.sql
+++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mssql.sql
@@ -401,4 +401,19 @@ CREATE TABLE ENUM_MAP_OWNER
(
ID BIGINT IDENTITY PRIMARY KEY,
NAME VARCHAR(100)
-);
\ No newline at end of file
+);
+
+
+DROP TABLE REFERENCED;
+DROP TABLE WITH_ONE_TO_ONE;
+
+CREATE TABLE WITH_ONE_TO_ONE
+(
+ ID VARCHAR(100)
+);
+
+CREATE TABLE REFERENCED
+(
+ "renamed" VARCHAR(100),
+ ID BIGINT
+);
diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mysql.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mysql.sql
index a6989938c5..a2cb9a4eac 100644
--- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mysql.sql
+++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-mysql.sql
@@ -364,4 +364,16 @@ CREATE TABLE ENUM_MAP_OWNER
(
ID BIGINT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(100)
-);
\ No newline at end of file
+);
+
+
+CREATE TABLE WITH_ONE_TO_ONE
+(
+ ID VARCHAR(100)
+);
+
+CREATE TABLE REFERENCED
+(
+ `renamed` VARCHAR(100),
+ ID BIGINT
+);
diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-oracle.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-oracle.sql
index 6f1700dff4..8cc59fdb5e 100644
--- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-oracle.sql
+++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-oracle.sql
@@ -42,6 +42,9 @@ DROP TABLE AUTHOR CASCADE CONSTRAINTS PURGE;
DROP TABLE ENUM_MAP_OWNER CASCADE CONSTRAINTS PURGE;
+DROP TABLE REFERENCED CASCADE CONSTRAINTS PURGE;
+DROP TABLE WITH_ONE_TO_ONE CASCADE CONSTRAINTS PURGE;
+
CREATE TABLE LEGO_SET
(
"id1" NUMBER GENERATED by default on null as IDENTITY PRIMARY KEY,
@@ -409,4 +412,15 @@ CREATE TABLE ENUM_MAP_OWNER
(
ID NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
NAME VARCHAR(100)
-);
\ No newline at end of file
+);
+
+CREATE TABLE WITH_ONE_TO_ONE
+(
+ ID VARCHAR(100)
+);
+
+CREATE TABLE REFERENCED
+(
+ "renamed" VARCHAR(100),
+ ID NUMBER
+);
diff --git a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-postgres.sql b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-postgres.sql
index 72b88cddfd..bc7df72a41 100644
--- a/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-postgres.sql
+++ b/spring-data-jdbc/src/test/resources/org.springframework.data.jdbc.core/JdbcAggregateTemplateIntegrationTests-postgres.sql
@@ -45,6 +45,9 @@ DROP TABLE AUTHOR;
DROP TABLE ENUM_MAP_OWNER;
+DROP TABLE REFERENCED;
+DROP TABLE WITH_ONE_TO_ONE;
+
CREATE TABLE LEGO_SET
(
"id1" SERIAL PRIMARY KEY,
@@ -431,4 +434,15 @@ CREATE TABLE ENUM_MAP_OWNER
(
ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1) PRIMARY KEY,
NAME VARCHAR(100)
-);
\ No newline at end of file
+);
+
+CREATE TABLE WITH_ONE_TO_ONE
+(
+ ID VARCHAR(100)
+);
+
+CREATE TABLE REFERENCED
+(
+ "renamed" VARCHAR(100),
+ ID BIGINT
+);
diff --git a/spring-data-r2dbc/pom.xml b/spring-data-r2dbc/pom.xml
index c834dc4cab..e318efd91d 100644
--- a/spring-data-r2dbc/pom.xml
+++ b/spring-data-r2dbc/pom.xml
@@ -6,7 +6,7 @@
4.0.0
spring-data-r2dbc
- 3.3.0-SNAPSHOT
+ 3.3.0-1684-converter-not-found-SNAPSHOT
Spring Data R2DBC
Spring Data module for R2DBC
@@ -15,7 +15,7 @@
org.springframework.data
spring-data-relational-parent
- 3.3.0-SNAPSHOT
+ 3.3.0-1684-converter-not-found-SNAPSHOT
diff --git a/spring-data-relational/pom.xml b/spring-data-relational/pom.xml
index 671e71d242..fe74d061bf 100644
--- a/spring-data-relational/pom.xml
+++ b/spring-data-relational/pom.xml
@@ -6,7 +6,7 @@
4.0.0
spring-data-relational
- 3.3.0-SNAPSHOT
+ 3.3.0-1684-converter-not-found-SNAPSHOT
Spring Data Relational
Spring Data Relational support
@@ -14,7 +14,7 @@
org.springframework.data
spring-data-relational-parent
- 3.3.0-SNAPSHOT
+ 3.3.0-1684-converter-not-found-SNAPSHOT