在 querydsl 中测试可空性后将值等同

Equating value after testing for nullability in querydsl

我正在使用 querydslspring-data-jpa。当从我的休息控制器中检索到一个值时,它可以是也可以不是 null。假设我有以下 class:

@Entity
class Person {

    @Id private String name;

    private int age;
}

我创建了一个 BooleanExpression 如下:

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

PersonRepository#findAll(...) 执行此操作时,抛出以下异常:

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]

你能帮我解决这个异常吗?

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

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