我正在尝试创建一个依赖于 boolean 参数数量的查询。创建谓词的函数如下所示:
Predicate createPredicate(Boolean param1, Boolean param2) {
List<BooleanExpression> booleanExpressions = new List<>();
if (param1)
booleanExpressions.add(/** expression 1 **/);
if (param2)
booleanExpressions.add(/** expression 2 **/);
convertExpressionsToPredicate(booleanExpressions);
}
问题是 convertExpressionsToPredicate
函数。 querydsl 中是否有任何特殊方法可以使用 or
运算符将表达式列表连接到一个谓词中?
我正在寻找的解决方案应该转换为:
List<BooleanExpression> booleanExpressions = List(exp1, exp2, exp3);
进入:
Predicate p = exp1.or(exp2).or(exp3)
最佳答案
要构造复杂的 boolean 表达式,请使用 com.querydsl.core.BooleanBuilder
类。它实现了 Predicate
并且可以级联形式使用。例如:
public List<Customer> getCustomer(String... names) {
QCustomer customer = QCustomer.customer;
JPAQuery<Customer> query = queryFactory.selectFrom(customer);
BooleanBuilder builder = new BooleanBuilder();
for (String name : names) {
builder.or(customer.name.eq(name));
}
query.where(builder);
return query.fetch();
}
BooleanBuilder
是可变的,最初表示 null。在每次 and
或 or
调用后,它代表操作的结果。
关于java - QueryDSL:将 BooleanExpression 列表转换为 Predicate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32326922/