From 03bf28b93065c645b89853b5e1599b5b745e38b9 Mon Sep 17 00:00:00 2001 From: kimjinmyeong Date: Sat, 16 Nov 2024 03:02:45 +0900 Subject: [PATCH] Fix NEGATING_SIMPLE_PROPERTY to use IS NOT NULL when argument is null When a query method uses NEGATING_SIMPLE_PROPERTY and the argument is null, the generated query should now use `IS NOT NULL` instead of `<>`. This ensures consistent behavior when handling null values across queries. Changes: - Updated `JpaQueryCreator` to handle null arguments in `NEGATING_SIMPLE_PROPERTY` by rewriting `<>` to `IS NOT NULL`. Closes #3675 --- .../data/jpa/repository/query/JpaQueryCreator.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryCreator.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryCreator.java index 255ac86dc3..28ec8cf317 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryCreator.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryCreator.java @@ -56,6 +56,7 @@ * @author Moritz Becker * @author Andrey Kovalev * @author Greg Turnquist + * @author Jinmyeong Kim */ public class JpaQueryCreator extends AbstractQueryCreator, Predicate> { @@ -311,8 +312,10 @@ public Predicate build() { return expression.isIsNullParameter() ? path.isNull() : builder.equal(upperIfIgnoreCase(path), upperIfIgnoreCase(expression.getExpression())); case NEGATING_SIMPLE_PROPERTY: - return builder.notEqual(upperIfIgnoreCase(getTypedPath(root, part)), - upperIfIgnoreCase(provider.next(part).getExpression())); + ParameterMetadata negatedExpression = provider.next(part); + Expression negatedPath = getTypedPath(root, part); + return negatedExpression.isIsNullParameter() ? negatedPath.isNotNull() + : builder.notEqual(upperIfIgnoreCase(negatedPath), upperIfIgnoreCase(negatedExpression.getExpression())); case IS_EMPTY: case IS_NOT_EMPTY: