Skip to content

Commit

Permalink
Fix identifier propagation for no-id list elements.
Browse files Browse the repository at this point in the history
Original pull request #1618
See #1554
  • Loading branch information
mp911de authored and schauder committed Oct 13, 2023
1 parent 5398b94 commit 5344197
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 64 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import static org.springframework.data.jdbc.core.convert.SqlGenerator.*;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
Expand All @@ -29,6 +30,7 @@
import org.springframework.data.mapping.PersistentPropertyPath;
import org.springframework.data.relational.core.conversion.IdValueSource;
import org.springframework.data.relational.core.mapping.AggregatePath;
import org.springframework.data.relational.core.mapping.AggregatePath.TableInfo;
import org.springframework.data.relational.core.mapping.RelationalMappingContext;
import org.springframework.data.relational.core.mapping.RelationalPersistentEntity;
import org.springframework.data.relational.core.mapping.RelationalPersistentProperty;
Expand Down Expand Up @@ -300,11 +302,27 @@ public Iterable<Object> findAllByPath(Identifier identifier,
String findAllByProperty = sql(actualType) //
.getFindAllByProperty(identifier, propertyPath);

RowMapper<?> rowMapper = path.isMap() ? this.getMapEntityRowMapper(path, identifier)
: this.getEntityRowMapper(path, identifier);

SqlParameterSource parameterSource = sqlParametersFactory.forQueryByIdentifier(identifier);
return operations.query(findAllByProperty, parameterSource, (RowMapper<Object>) rowMapper);
return operations.query(findAllByProperty, parameterSource, new RowMapper<>() {

@Override
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {

if (path.isMap()) {
return getMapEntityRowMapper(path, identifier).mapRow(rs, rowNum);
}

// Add row number as key for paths that do not defile an identifier and that are contained in a collection.
Identifier identifierToUse = identifier;
if (!path.hasIdProperty() && path.isQualified()) {

TableInfo tableInfo = path.getTableInfo();
identifierToUse = identifierToUse.withPart(tableInfo.qualifierColumnInfo().name(), rowNum, Object.class);
}

return getEntityRowMapper(path, identifierToUse).mapRow(rs, rowNum);
}
});
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -883,6 +883,9 @@ void saveAndLoadLongChainOfListsWithoutIds() {
assertThat(saved.four).describedAs("Something went wrong during saving").isNotNull();

NoIdListChain4 reloaded = template.findById(saved.four, NoIdListChain4.class);

assertThat(reloaded.chain3).hasSameSizeAs(saved.chain3);
assertThat(reloaded.chain3.get(0).chain2).hasSameSizeAs(saved.chain3.get(0).chain2);
assertThat(reloaded).isEqualTo(saved);
}

Expand Down Expand Up @@ -1537,11 +1540,8 @@ public int hashCode() {

@Override
public String toString() {
final StringBuffer sb = new StringBuffer();
sb.append(getClass().getSimpleName());
sb.append(" [zeroValue='").append(zeroValue).append('\'');
sb.append(']');
return sb.toString();
String sb = getClass().getSimpleName() + " [zeroValue='" + zeroValue + '\'' + ']';
return sb;
}
}

Expand All @@ -1566,12 +1566,8 @@ public int hashCode() {

@Override
public String toString() {
final StringBuffer sb = new StringBuffer();
sb.append(getClass().getSimpleName());
sb.append(" [oneValue='").append(oneValue).append('\'');
sb.append(", chain0=").append(chain0);
sb.append(']');
return sb.toString();
String sb = getClass().getSimpleName() + " [oneValue='" + oneValue + '\'' + ", chain0=" + chain0 + ']';
return sb;
}
}

Expand All @@ -1596,12 +1592,8 @@ public int hashCode() {

@Override
public String toString() {
final StringBuffer sb = new StringBuffer();
sb.append(getClass().getSimpleName());
sb.append(" [twoValue='").append(twoValue).append('\'');
sb.append(", chain1=").append(chain1);
sb.append(']');
return sb.toString();
String sb = getClass().getSimpleName() + " [twoValue='" + twoValue + '\'' + ", chain1=" + chain1 + ']';
return sb;
}
}

Expand All @@ -1626,12 +1618,8 @@ public int hashCode() {

@Override
public String toString() {
final StringBuffer sb = new StringBuffer();
sb.append(getClass().getSimpleName());
sb.append(" [threeValue='").append(threeValue).append('\'');
sb.append(", chain2=").append(chain2);
sb.append(']');
return sb.toString();
String sb = getClass().getSimpleName() + " [threeValue='" + threeValue + '\'' + ", chain2=" + chain2 + ']';
return sb;
}
}

Expand All @@ -1658,13 +1646,9 @@ public int hashCode() {

@Override
public String toString() {
final StringBuffer sb = new StringBuffer();
sb.append(getClass().getSimpleName());
sb.append(" [four=").append(four);
sb.append(", fourValue='").append(fourValue).append('\'');
sb.append(", chain3=").append(chain3);
sb.append(']');
return sb.toString();
String sb = getClass().getSimpleName() + " [four=" + four + ", fourValue='" + fourValue + '\'' + ", chain3="
+ chain3 + ']';
return sb;
}

}
Expand Down Expand Up @@ -1692,11 +1676,8 @@ public int hashCode() {

@Override
public String toString() {
final StringBuffer sb = new StringBuffer();
sb.append(getClass().getSimpleName());
sb.append(" [zeroValue='").append(zeroValue).append('\'');
sb.append(']');
return sb.toString();
String sb = getClass().getSimpleName() + " [zeroValue='" + zeroValue + '\'' + ']';
return sb;
}
}

Expand All @@ -1721,12 +1702,8 @@ public int hashCode() {

@Override
public String toString() {
final StringBuffer sb = new StringBuffer();
sb.append(getClass().getSimpleName());
sb.append(" [oneValue='").append(oneValue).append('\'');
sb.append(", chain0=").append(chain0);
sb.append(']');
return sb.toString();
String sb = getClass().getSimpleName() + " [oneValue='" + oneValue + '\'' + ", chain0=" + chain0 + ']';
return sb;
}
}

Expand All @@ -1751,12 +1728,8 @@ public int hashCode() {

@Override
public String toString() {
final StringBuffer sb = new StringBuffer();
sb.append(getClass().getSimpleName());
sb.append(" [twoValue='").append(twoValue).append('\'');
sb.append(", chain1=").append(chain1);
sb.append(']');
return sb.toString();
String sb = getClass().getSimpleName() + " [twoValue='" + twoValue + '\'' + ", chain1=" + chain1 + ']';
return sb;
}
}

Expand All @@ -1781,12 +1754,8 @@ public int hashCode() {

@Override
public String toString() {
final StringBuffer sb = new StringBuffer();
sb.append(getClass().getSimpleName());
sb.append(" [threeValue='").append(threeValue).append('\'');
sb.append(", chain2=").append(chain2);
sb.append(']');
return sb.toString();
String sb = getClass().getSimpleName() + " [threeValue='" + threeValue + '\'' + ", chain2=" + chain2 + ']';
return sb;
}
}

Expand All @@ -1813,13 +1782,9 @@ public int hashCode() {

@Override
public String toString() {
final StringBuffer sb = new StringBuffer();
sb.append(getClass().getSimpleName());
sb.append(" [four=").append(four);
sb.append(", fourValue='").append(fourValue).append('\'');
sb.append(", chain3=").append(chain3);
sb.append(']');
return sb.toString();
String sb = getClass().getSimpleName() + " [four=" + four + ", fourValue='" + fourValue + '\'' + ", chain3="
+ chain3 + ']';
return sb;
}
}

Expand Down

0 comments on commit 5344197

Please sign in to comment.