diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/DefaultDataAccessStrategy.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/DefaultDataAccessStrategy.java index fce64c689..df8caec59 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/DefaultDataAccessStrategy.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/DefaultDataAccessStrategy.java @@ -127,7 +127,12 @@ public class DefaultDataAccessStrategy implements DataAccessStrategy { @Override public boolean update(S instance, Class domainType) { - return operations.update(sql(domainType).getUpdate(), sqlParametersFactory.forUpdate(instance, domainType)) != 0; + + SqlIdentifierParameterSource parameterSource = sqlParametersFactory.forUpdate(instance, domainType); + if (parameterSource.size() <= 1) { + return true; // returning true, because conceptually the one row was correctly updated + } + return operations.update(sql(domainType).getUpdate(), parameterSource) != 0; } @Override diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/SqlIdentifierParameterSource.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/SqlIdentifierParameterSource.java index aaa677a8f..b9e064054 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/SqlIdentifierParameterSource.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/SqlIdentifierParameterSource.java @@ -81,4 +81,8 @@ class SqlIdentifierParameterSource extends AbstractSqlParameterSource { addValue(identifier, others.getValue(name), others.getSqlType(name)); } } + + int size() { + return namesToValues.size(); + } } diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateIntegrationTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateIntegrationTests.java index 08e86cf77..f825f5c6b 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateIntegrationTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/JdbcAggregateTemplateIntegrationTests.java @@ -1021,6 +1021,16 @@ class JdbcAggregateTemplateIntegrationTests { assertThat(template.save(entity).id).isNotNull(); } + @Test // GH-1309 + void updateIdOnlyAggregate() { + + WithIdOnly entity = new WithIdOnly(); + + assertThat(template.save(entity).id).isNotNull(); + + template.save(entity); + } + private void saveAndUpdateAggregateWithVersion(VersionedAggregate aggregate, Function toConcreteNumber) { saveAndUpdateAggregateWithVersion(aggregate, toConcreteNumber, 0); @@ -1456,6 +1466,7 @@ class JdbcAggregateTemplateIntegrationTests { @Id Long id; } + @Configuration @Import(TestConfiguration.class) static class Config {