diff --git a/pom.xml b/pom.xml
index 22fdf5a97e..273ef94534 100755
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-jpa-parent
- 3.4.0-SNAPSHOT
+ 3.4.x-GH-3504-SNAPSHOT
pom
Spring Data JPA Parent
diff --git a/spring-data-envers/pom.xml b/spring-data-envers/pom.xml
index 8b836ae2f3..9e09351c00 100755
--- a/spring-data-envers/pom.xml
+++ b/spring-data-envers/pom.xml
@@ -5,12 +5,12 @@
org.springframework.data
spring-data-envers
- 3.4.0-SNAPSHOT
+ 3.4.x-GH-3504-SNAPSHOT
org.springframework.data
spring-data-jpa-parent
- 3.4.0-SNAPSHOT
+ 3.4.x-GH-3504-SNAPSHOT
../pom.xml
diff --git a/spring-data-jpa-distribution/pom.xml b/spring-data-jpa-distribution/pom.xml
index a90c1f7282..3c3692351c 100644
--- a/spring-data-jpa-distribution/pom.xml
+++ b/spring-data-jpa-distribution/pom.xml
@@ -14,7 +14,7 @@
org.springframework.data
spring-data-jpa-parent
- 3.4.0-SNAPSHOT
+ 3.4.x-GH-3504-SNAPSHOT
../pom.xml
diff --git a/spring-data-jpa/pom.xml b/spring-data-jpa/pom.xml
index 3006702796..584976eec4 100644
--- a/spring-data-jpa/pom.xml
+++ b/spring-data-jpa/pom.xml
@@ -6,7 +6,7 @@
org.springframework.data
spring-data-jpa
- 3.4.0-SNAPSHOT
+ 3.4.x-GH-3504-SNAPSHOT
Spring Data JPA
Spring Data module for JPA repositories.
@@ -15,7 +15,7 @@
org.springframework.data
spring-data-jpa-parent
- 3.4.0-SNAPSHOT
+ 3.4.x-GH-3504-SNAPSHOT
../pom.xml
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 f1e18f3970..befaccc7b8 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
@@ -93,7 +93,7 @@ public boolean hasConstructorExpression() {
*/
private static boolean isSubquery(ParserRuleContext ctx) {
- if (ctx instanceof HqlParser.SubqueryContext) {
+ if (ctx instanceof HqlParser.SubqueryContext || ctx instanceof HqlParser.CteContext) {
return true;
} else if (ctx instanceof HqlParser.SelectStatementContext) {
return false;
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 c476f0d5bc..0c4b3251f2 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
@@ -500,6 +500,36 @@ select count(user) from User user
""");
}
+ @Test // GH-3504
+ void createCountWithCteShouldWork() {
+
+ String countQuery = createCountQueryFor("""
+ WITH maxId AS(select max(sr.snapshot.id) snapshotId from SnapshotReference sr
+ where sr.id.selectionId = ?1 and sr.enabled
+ group by sr.userId)
+ select sr from maxId m join SnapshotReference sr on sr.snapshot.id = m.snapshotId
+ """);
+
+ assertThat(countQuery).startsWith("WITH maxId AS(select max(sr.snapshot.id) snapshotId from SnapshotReference sr")
+ .endsWith("select count(m) from maxId m join SnapshotReference sr on sr.snapshot.id = m.snapshotId");
+ }
+
+ @Test // GH-3504
+ void createSortedQueryWithCteShouldWork() {
+
+ String sortedQuery = createQueryFor("""
+ WITH maxId AS(select max(sr.snapshot.id) snapshotId from SnapshotReference sr
+ where sr.id.selectionId = ?1 and sr.enabled
+ group by sr.userId)
+ select sr from maxId m join SnapshotReference sr on sr.snapshot.id = m.snapshotId
+ """, Sort.by("sr.snapshot"));
+
+ assertThat(sortedQuery).startsWith(
+ "WITH maxId AS(select max(sr.snapshot.id) snapshotId from SnapshotReference sr where sr.id.selectionId = ?1 and sr.enabled group by sr.userId )")
+ .endsWith(
+ "select sr from maxId m join SnapshotReference sr on sr.snapshot.id = m.snapshotId order by sr.snapshot asc");
+ }
+
@Test
void createCountQuerySupportsLineBreaksInSelectClause() {