首页 > 解决方案 > Equating value after testing for nullability in querydsl

问题描述

I am using querydsl with spring-data-jpa. When a value is retrieved from my rest controller, it can or cannot be null. Lets assume that I have following class:

@Entity
class Person {

    @Id private String name;

    private int age;
}

I have created a BooleanExpression as below:

public static final BooleanExpression hasName(String name) {
    return QPerson.name.isNotNull().and(QPerson.name.eq(name));
}

When this is executed by PersonRepository#findAll(...), the following exception is thrown:

java.lang.IllegalArgumentException: eq(null) is not allowed. Use isNull() instead
    at com.querydsl.core.types.dsl.SimpleExpression.eq(SimpleExpression.java:127) ~[querydsl-core-4.1.4.jar:na]

Can you please help me in fixing this exception?

标签: javaspring-data-jpaquerydsl

解决方案


异常似乎说 hasName 的参数为空。尝试:

return name==null ? QPerson.name.isNull() : QPerson.name.eq(name);

推荐阅读