diff --git a/pom.xml b/pom.xml
index b7f501997..3ebc82d28 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,6 +31,7 @@
3.0.3
6.2.1.Final
2.7.1
+
2.1.214
4.5
8.0.31
42.5.0
diff --git a/spring-data-jpa/pom.xml b/spring-data-jpa/pom.xml
index f4560082c..4f2c403f7 100644
--- a/spring-data-jpa/pom.xml
+++ b/spring-data-jpa/pom.xml
@@ -100,6 +100,13 @@
test
+
+ com.h2database
+ h2
+ ${h2}
+ test
+
+
com.mysql
diff --git a/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Hql.g4 b/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Hql.g4
index 731bb16c7..b702bad0c 100644
--- a/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Hql.g4
+++ b/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Hql.g4
@@ -579,7 +579,7 @@ dealingWithNullExpression
// https://docs.jboss.org/hibernate/orm/6.1/userguide/html_single/Hibernate_User_Guide.html#hql-like-predicate
stringPatternMatching
- : expression NOT? (LIKE | ILIKE) expression (ESCAPE expression)?
+ : expression NOT? (LIKE | ILIKE) expression (ESCAPE (character|parameter))?
;
// https://docs.jboss.org/hibernate/orm/6.1/userguide/html_single/Hibernate_User_Guide.html#hql-elements-indices
diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryRenderer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryRenderer.java
index 5446173ca..17458b20e 100644
--- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryRenderer.java
+++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryRenderer.java
@@ -2124,7 +2124,11 @@ class HqlQueryRenderer extends HqlBaseVisitor> {
if (ctx.ESCAPE() != null) {
tokens.add(new JpaQueryParsingToken(ctx.ESCAPE()));
- tokens.addAll(visit(ctx.expression(2)));
+ if (ctx.character() != null) {
+ tokens.addAll(visit(ctx.character()));
+ } else if (ctx.parameter() != null) {
+ tokens.addAll(visit(ctx.parameter()));
+ }
}
return tokens;
diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/EclipseLinkUserRepositoryFinderTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/EclipseLinkUserRepositoryFinderTests.java
index 1b6bc2a7b..473331252 100644
--- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/EclipseLinkUserRepositoryFinderTests.java
+++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/EclipseLinkUserRepositoryFinderTests.java
@@ -23,8 +23,9 @@ import org.springframework.test.context.ContextConfiguration;
* https://bugs.eclipse.org/bugs/show_bug.cgi?id=349477.
*
* @author Oliver Gierke
+ * @author Greg Turnquist
*/
-@ContextConfiguration("classpath:eclipselink.xml")
+@ContextConfiguration("classpath:eclipselink-h2.xml")
class EclipseLinkUserRepositoryFinderTests extends UserRepositoryFinderTests {
@Disabled
@@ -35,21 +36,4 @@ class EclipseLinkUserRepositoryFinderTests extends UserRepositoryFinderTests {
@Override
void executesInKeywordForPageCorrectly() {}
- @Disabled("Can't get ESCAPE clause working with EclipseLink. See #2955")
- @Override
- void escapingInLikeSpels() {
- super.escapingInLikeSpels();
- }
-
- @Disabled("Can't get ESCAPE clause working with EclipseLink. See #2955")
- @Override
- void escapingInLikeSpelsInThePresenceOfEscapeCharacters() {
- super.escapingInLikeSpelsInThePresenceOfEscapeCharacters();
- }
-
- @Disabled("Can't get ESCAPE clause working with EclipseLink. See #2955")
- @Override
- void escapingInLikeSpelsInThePresenceOfEscapedWildcards() {
- super.escapingInLikeSpelsInThePresenceOfEscapedWildcards();
- }
}
diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryFinderTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryFinderTests.java
index bccc417ea..4b6c4bb9e 100644
--- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryFinderTests.java
+++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryFinderTests.java
@@ -52,10 +52,11 @@ import org.springframework.transaction.annotation.Transactional;
*
* @author Oliver Gierke
* @author Krzysztof Krason
+ * @author Greg Turnquist
* @see QueryLookupStrategy
*/
@ExtendWith(SpringExtension.class)
-@ContextConfiguration(locations = "classpath:config/namespace-application-context.xml")
+@ContextConfiguration(locations = "classpath:config/namespace-application-context-h2.xml")
@Transactional
class UserRepositoryFinderTests {
diff --git a/spring-data-jpa/src/test/resources/config/namespace-application-context-h2.xml b/spring-data-jpa/src/test/resources/config/namespace-application-context-h2.xml
new file mode 100644
index 000000000..9cb3eab27
--- /dev/null
+++ b/spring-data-jpa/src/test/resources/config/namespace-application-context-h2.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-data-jpa/src/test/resources/eclipselink-h2.xml b/spring-data-jpa/src/test/resources/eclipselink-h2.xml
new file mode 100644
index 000000000..71d4ab637
--- /dev/null
+++ b/spring-data-jpa/src/test/resources/eclipselink-h2.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+ org.h2.Driver
+ jdbc:h2:mem:hades
+ sa
+
+ create-tables
+ false
+ SEVERE
+
+
+
diff --git a/spring-data-jpa/src/test/resources/infrastructure-h2.xml b/spring-data-jpa/src/test/resources/infrastructure-h2.xml
new file mode 100644
index 000000000..723454c01
--- /dev/null
+++ b/spring-data-jpa/src/test/resources/infrastructure-h2.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-data-jpa/src/test/resources/scripts/h2-init.sql b/spring-data-jpa/src/test/resources/scripts/h2-init.sql
new file mode 100644
index 000000000..1c8a0e797
--- /dev/null
+++ b/spring-data-jpa/src/test/resources/scripts/h2-init.sql
@@ -0,0 +1 @@
+;
\ No newline at end of file
diff --git a/spring-data-jpa/src/test/resources/scripts/h2-stored-procedures.sql b/spring-data-jpa/src/test/resources/scripts/h2-stored-procedures.sql
new file mode 100644
index 000000000..1023dc1a3
--- /dev/null
+++ b/spring-data-jpa/src/test/resources/scripts/h2-stored-procedures.sql
@@ -0,0 +1,9 @@
+/;
+DROP alias IF EXISTS plus1inout
+/;
+CREATE alias plus1inout AS $$
+Integer plus1inout(Integer arg) {
+ return arg + 1;
+}
+$$
+/;