From 8c30022ecc33d4f579514d4d2d32337d9845e242 Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Fri, 21 Nov 2025 13:43:00 +0100 Subject: [PATCH] Do not throw `IncorrectUpdateSemanticsDataAccessException` on zero updated rows. When an update results in 0 updated rows (without optimistic locking) we now ignore it, instead of throwing an exception. The reason is that at least some databases return 0 when a row for updating was found, but none of the values changed. Closes #2176 Original pull request: #2185 --- .../jdbc/core/JdbcAggregateChangeExecutionContext.java | 7 +------ .../AbstractJdbcAggregateTemplateIntegrationTests.java | 6 ++---- 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateChangeExecutionContext.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateChangeExecutionContext.java index 87644844d..90db694c7 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateChangeExecutionContext.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/JdbcAggregateChangeExecutionContext.java @@ -334,12 +334,7 @@ class JdbcAggregateChangeExecutionContext { } private void updateWithoutVersion(DbAction.UpdateRoot update) { - - if (!accessStrategy.update(update.getEntity(), update.getEntityType())) { - - throw new IncorrectUpdateSemanticsDataAccessException( - String.format(UPDATE_FAILED, update.getEntity(), getIdFrom(update))); - } + accessStrategy.update(update.entity(), update.getEntityType()); } private void updateWithVersion(DbAction.UpdateRoot update) { 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 e27c386d7..64d1131b2 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 @@ -583,9 +583,7 @@ abstract class AbstractJdbcAggregateTemplateIntegrationTests { LegoSet entity = new LegoSet(); entity.id = 100L; // does not exist in the database - assertThatExceptionOfType(DbActionExecutionException.class) // - .isThrownBy(() -> template.save(entity)) // - .withCauseInstanceOf(IncorrectUpdateSemanticsDataAccessException.class); + assertThatCode(() -> template.save(entity)).doesNotThrowAnyException(); } @Test // DATAJDBC-112 @@ -1185,7 +1183,7 @@ abstract class AbstractJdbcAggregateTemplateIntegrationTests { aggregate.setVersion(null); aggregate.setId(23L); - assertThatThrownBy(() -> template.save(aggregate)).isInstanceOf(DbActionExecutionException.class); + assertThatCode(() -> template.save(aggregate)).doesNotThrowAnyException(); } @Test // DATAJDBC-462