Render NEGATING_SIMPLE_PROPERTY as IS NOT NULL when argument value is null.

When a query method uses NEGATING_SIMPLE_PROPERTY and the argument is null, the generated query now uses `IS NOT NULL` instead of `<>`. This ensures consistent behavior when handling null values across queries.

Closes: #3675
Original Pull Request: #3681
This commit is contained in:
kimjinmyeong
2024-11-16 03:02:45 +09:00
committed by Christoph Strobl
parent 6255a0cd7e
commit 186d9f550f

View File

@@ -56,6 +56,7 @@ import org.springframework.util.Assert;
* @author Moritz Becker
* @author Andrey Kovalev
* @author Greg Turnquist
* @author Jinmyeong Kim
*/
public class JpaQueryCreator extends AbstractQueryCreator<CriteriaQuery<? extends Object>, Predicate> {
@@ -311,8 +312,10 @@ public class JpaQueryCreator extends AbstractQueryCreator<CriteriaQuery<? extend
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<Object> negatedExpression = provider.next(part);
Expression<Object> negatedPath = getTypedPath(root, part);
return negatedExpression.isIsNullParameter() ? negatedPath.isNotNull()
: builder.notEqual(upperIfIgnoreCase(negatedPath), upperIfIgnoreCase(negatedExpression.getExpression()));
case IS_EMPTY:
case IS_NOT_EMPTY: