diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryTransformer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryTransformer.java index 18a40573e..6afba0f1f 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryTransformer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryTransformer.java @@ -96,6 +96,8 @@ class HqlQueryTransformer extends HqlQueryRenderer { return true; } else if (ctx instanceof HqlParser.SelectStatementContext) { return false; + } else if (ctx instanceof HqlParser.InsertStatementContext) { + return false; } else { return isSubquery(ctx.getParent()); } diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryTransformerTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryTransformerTests.java index 172be0489..e11dec1eb 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryTransformerTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryTransformerTests.java @@ -973,6 +973,19 @@ class HqlQueryTransformerTests { .isEqualTo("FROM Story WHERE enabled = true order by created desc"); } + @Test // GH-2977 + void isSubqueryThrowsException() { + + String query = """ + insert into MyEntity (id, col) + select max(id), col + from MyEntityStaging + group by col + """; + + assertThat(createQueryFor(query, Sort.unsorted())).isEqualToIgnoringWhitespace(query); + } + private void assertCountQuery(String originalQuery, String countQuery) { assertThat(createCountQueryFor(originalQuery)).isEqualTo(countQuery); }