Eclipselink表达式过滤器OR子句

时间:2017-04-20 16:05:24

标签: java eclipselink

在需要OR子句时,我在使用eclipselink表达式创建正确的查询时遇到问题。这是我的代码:

Expression filter = /* filter is not null */;

if (secondStatus != null) {
    Integer second = ticketService.getStatusIdByName(secondStatus);

    filter = filter.and(
                 builder.get(Complaint.propertyName.status)
                     .equal(second)
                     .or(builder.get(Complaint.propertyName.status)
                     .equal(status)));

    // Also tried the below
    // filter = filter.or(builder.get(Complaint.propertyName.status).equal(second));
}

第一种方式只返回包含其中一种状态的查询,同时第二种方式(注释掉)返回它自己的子查询。两种方式我都得到了不正确的结果。将OR子句合并到查询中的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我弄清楚我做错了什么。我错过了第二个语句中的初始过滤器,假设它会自动产生正确的SQL。

filter = filter.and(builder.get(Complaint.propertyName.status)
.equal(second)
.or(filter.and(builder.get(Complaint.propertyName.status)
.equal(status))));

这可以按预期工作。