在需要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子句合并到查询中的正确方法是什么?
答案 0 :(得分:0)
我弄清楚我做错了什么。我错过了第二个语句中的初始过滤器,假设它会自动产生正确的SQL。
filter = filter.and(builder.get(Complaint.propertyName.status)
.equal(second)
.or(filter.and(builder.get(Complaint.propertyName.status)
.equal(status))));
这可以按预期工作。