diff --git a/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Jpql.g4 b/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Jpql.g4 index 4a23f4c14..5c63a543b 100644 --- a/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Jpql.g4 +++ b/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Jpql.g4 @@ -606,6 +606,7 @@ identification_variable | OUTER | FLOOR | SIGN + | TIME | TYPE | VALUE) ; diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlQueryRenderer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlQueryRenderer.java index b5a41fe99..7ff5a6f39 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlQueryRenderer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlQueryRenderer.java @@ -544,9 +544,11 @@ class JpqlQueryRenderer extends JpqlBaseVisitor> { ctx.update_item().forEach(updateItemContext -> { tokens.addAll(visit(updateItemContext)); + NOSPACE(tokens); tokens.add(TOKEN_COMMA); }); CLIP(tokens); + SPACE(tokens); return tokens; } diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryRendererTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryRendererTests.java index bc0938c50..c30dcbf71 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryRendererTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryRendererTests.java @@ -958,4 +958,13 @@ class JpqlQueryRendererTests { void dateAndFromShouldBeValidNames() { assertQuery("SELECT e FROM Entity e WHERE e.embeddedId.date BETWEEN :from AND :to"); } + + @Test // GH-3092 + void timeShouldBeAValidParameterName() { + assertQuery(""" + UPDATE Lock L + SET L.isLocked = TRUE, L.forceUnlockTime = :forceUnlockTime + WHERE L.isLocked = FALSE OR L.forceUnlockTime < :time + """); + } }