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 48759606..640fe869 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 @@ -139,7 +139,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; } /* 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 aaa677a8..b9e06405 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 497ecca7..c57a66c9 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 @@ -983,6 +983,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); + } + @Test // GH-1232 @EnabledOnFeature(IS_HSQL) void beforeSaveCallbackEffectsAreVisibleForInsert() {