diff --git a/pom.xml b/pom.xml
index a3be6252ed..e5cee5aeb8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-jpa-parent
- 3.3.0-SNAPSHOT
+ 3.3.x-3314-SNAPSHOT
pom
Spring Data JPA Parent
diff --git a/spring-data-envers/pom.xml b/spring-data-envers/pom.xml
index 470678d048..833e26f650 100755
--- a/spring-data-envers/pom.xml
+++ b/spring-data-envers/pom.xml
@@ -5,12 +5,12 @@
org.springframework.data
spring-data-envers
- 3.3.0-SNAPSHOT
+ 3.3.x-3314-SNAPSHOT
org.springframework.data
spring-data-jpa-parent
- 3.3.0-SNAPSHOT
+ 3.3.x-3314-SNAPSHOT
../pom.xml
diff --git a/spring-data-jpa-distribution/pom.xml b/spring-data-jpa-distribution/pom.xml
index 6bd074181c..01552f6d4f 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.3.0-SNAPSHOT
+ 3.3.x-3314-SNAPSHOT
../pom.xml
diff --git a/spring-data-jpa/pom.xml b/spring-data-jpa/pom.xml
index 4a2875c758..5d4ea4ce18 100644
--- a/spring-data-jpa/pom.xml
+++ b/spring-data-jpa/pom.xml
@@ -6,7 +6,7 @@
org.springframework.data
spring-data-jpa
- 3.3.0-SNAPSHOT
+ 3.3.x-3314-SNAPSHOT
Spring Data JPA
Spring Data module for JPA repositories.
@@ -15,7 +15,7 @@
org.springframework.data
spring-data-jpa-parent
- 3.3.0-SNAPSHOT
+ 3.3.x-3314-SNAPSHOT
../pom.xml
diff --git a/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Eql.g4 b/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Eql.g4
index 9bbf47a86c..46748477a0 100644
--- a/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Eql.g4
+++ b/spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Eql.g4
@@ -362,7 +362,7 @@ like_expression
;
null_comparison_expression
- : (single_valued_path_expression | input_parameter | nullif_expression) IS (NOT)? NULL
+ : (single_valued_path_expression | input_parameter | nullif_expression) ((IS (NOT)?) | (op=(EQUAL | NOT_EQUAL))) NULL
;
empty_collection_comparison_expression
diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlQueryRenderer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlQueryRenderer.java
index 6688d78f01..279ff34a48 100644
--- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlQueryRenderer.java
+++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlQueryRenderer.java
@@ -1315,10 +1315,13 @@ public List visitNull_comparison_expression(EqlParser.Null
tokens.addAll(visit(ctx.nullif_expression()));
}
- tokens.add(new JpaQueryParsingToken(ctx.IS()));
-
- if (ctx.NOT() != null) {
- tokens.add(new JpaQueryParsingToken(ctx.NOT()));
+ if(ctx.op != null) {
+ tokens.add(new JpaQueryParsingToken(ctx.op.getText()));
+ } else {
+ tokens.add(new JpaQueryParsingToken(ctx.IS()));
+ if (ctx.NOT() != null) {
+ tokens.add(new JpaQueryParsingToken(ctx.NOT()));
+ }
}
tokens.add(new JpaQueryParsingToken(ctx.NULL()));
diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlComplianceTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlComplianceTests.java
index 67cbf22372..289bc03230 100644
--- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlComplianceTests.java
+++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlComplianceTests.java
@@ -403,4 +403,17 @@ void coalesceFunctions() {
assertQuery("SELECT b FROM Bundle b WHERE coalesce(b.deleted, false) AND b.latestImport = true");
assertQuery("SELECT b FROM Bundle b WHERE NOT coalesce(b.deleted, false) AND b.latestImport = true");
}
+
+ @Test // GH-3314
+ void isNullAndIsNotNull() {
+
+ assertQuery("SELECT e FROM Employee e WHERE (e.active = null OR e.active = true)");
+ assertQuery("SELECT e FROM Employee e WHERE (e.active = NULL OR e.active = true)");
+ assertQuery("SELECT e FROM Employee e WHERE (e.active IS null OR e.active = true)");
+ assertQuery("SELECT e FROM Employee e WHERE (e.active IS NULL OR e.active = true)");
+ assertQuery("SELECT e FROM Employee e WHERE (e.active != null OR e.active = true)");
+ assertQuery("SELECT e FROM Employee e WHERE (e.active != NULL OR e.active = true)");
+ assertQuery("SELECT e FROM Employee e WHERE (e.active IS NOT null OR e.active = true)");
+ assertQuery("SELECT e FROM Employee e WHERE (e.active IS NOT NULL OR e.active = true)");
+ }
}