java - QueryDSL:如何从 case 表达式创建谓词?

标签 java querydsl

使用 QueryDSL,我想创建一个 Predicate来自返回 boolean 表达式的 case 表达式:

public static Predicate examplePredicate(NumberPath<Integer> typePath, DateTimePath<Date> timestampPath) {
    final Expression<Boolean> expr = typePath
        .when(0).then(timestampPath.lt(currentTimestamp()))
        .when(1).then(timestampPath.goe(currentTimestamp()))
        .otherwise(false);
    // How can I create a predicate from expr?
}

全部then case 表达式的子句返回 BooleanExpression s - 实现 Predicate - 但是expr其本身类型为 Expression<Boolean> .

如何创建 Predicate (可能是 BooleanExpression )来自这样的 case 表达式?

最佳答案

您可以使用 CaseBuilder如下:

new CaseBuilder()
.when(typePath.intValue().eq(0))
.then(timestampPath.lt(currentTimes‌​tamp()))
...

正如原始问题的评论中所述,这会生成与原始代码摘录生成的 SQL 不同的 SQL,但会执行所需的功能。

关于java - QueryDSL:如何从 case 表达式创建谓词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32253002/

相关文章:

java - 比较两个 HTML 源代码并显示视觉差异

maven - JpaRepository Querydsl : Qclass not generates

java - 使用 querydsl 按 null 搜索

java线程同步问题

Java 5 HTML 转义以防止 XSS

java - 用单元格内容替换字符串单元格引用

hibernate - 如何在Kotlin Spring Boot中生成QClass?

java - POI : setCellType(Cell. CELL_TYPE_FORMULA) 由于 Cell.CELL_TYPE_ERROR 而失败

java - 使用 QueryDSL 和 Mongo 转换映射值类型

mongodb - 无法生成 querydsl Q 类