From 09f9da5128ba1e17db08a9d2483e0f26ce648eb8 Mon Sep 17 00:00:00 2001 From: Viktor Ardelean Date: Wed, 2 Nov 2022 15:38:41 +0200 Subject: [PATCH] Improved error message on missing back reference. Closes #833 Original pull request 1384 --- .../data/jdbc/core/convert/SqlGenerator.java | 5 ++++- .../data/jdbc/core/convert/SqlGeneratorUnitTests.java | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/SqlGenerator.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/SqlGenerator.java index b299df458..84a528057 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/SqlGenerator.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/SqlGenerator.java @@ -260,7 +260,10 @@ class SqlGenerator { Condition condition = null; for (SqlIdentifier backReferenceColumn : parentIdentifier.toMap().keySet()) { - + if (SqlIdentifier.EMPTY.equals(backReferenceColumn)){ + throw new UnsupportedOperationException( + "An empty SqlIdentifier can't be used in condition. Make sure that all composite primary keys are defined in the query."); + } Condition newCondition = table.column(backReferenceColumn).isEqualTo(getBindMarker(backReferenceColumn)); condition = condition == null ? newCondition : condition.and(newCondition); } diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/SqlGeneratorUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/SqlGeneratorUnitTests.java index 9869c11a0..f9fff4add 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/SqlGeneratorUnitTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/SqlGeneratorUnitTests.java @@ -443,6 +443,17 @@ class SqlGeneratorUnitTests { } + @Test // DATAJDBC-613 + void findAllByPropertyWithEmptyBackrefColumn() { + + assertThatThrownBy(() -> { + sqlGenerator.getFindAllByProperty(Identifier.of(EMPTY, 0, Object.class), + unquoted("key-column"), + false); + }).isInstanceOf(UnsupportedOperationException.class) + .hasMessageContaining("An empty SqlIdentifier can't be used in condition. Make sure that all composite primary keys are defined in the query."); + } + @Test // DATAJDBC-219 void updateWithVersion() {