java - QueryDSL:将 BooleanExpression 列表转换为 Predicate

标签 java querydsl

我正在尝试创建一个依赖于 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。在每次 andor 调用后,它代表操作的结果。

关于java - QueryDSL:将 BooleanExpression 列表转换为 Predicate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32326922/

相关文章:

Java thenComparing通配符签名

java - jar执行命令第一行出错

spring-boot - QueryDSL 注释处理器和 gradle 插件

java - 使用 QueryDsl 的多态 where 子句

sql - 使用 Query DSL 从每组中选择具有最大值的记录

hibernate - 在Querydsl中选择Long类型变量

抛出 NoSuchAlgorithException 的 Java SSL 代码

java - 删除与另一个对象有manyTomany关系的对象

java - 如何为在 Netbeans(java) 中创建的应用程序创建安装程序文件?

java - 使用 querydsl 模拟数据库查询 - 可选问题