【发布时间】:2018-05-11 09:59:54
【问题描述】:
我想使用 JPQL 进行选择查询,但我的代码有误, 这是代码
private CriteriaQuery<TbCase> getQueryParams(TbCaseSearchParams params, CriteriaBuilder cb, CriteriaQuery<TbCase> cq,Root<TbCase> root){
List<Predicate> criteria = new ArrayList<Predicate>();
if(params.getEqColumns() != null && params.getEqValues() != null){
criteria = getEqParamsCriteria(criteria, cb, root, params.getEqColumns(), params.getEqValues());
}else if(params.getLikeColumns() != null && params.getLikeValues() != null){
criteria = getLikeParamsCriteria(criteria, cb, root, params.getLikeColumns(), params.getLikeValues());
}else{
if(params.getCaseNumber() != null){
criteria.add(cb.equal(root.get("caseNumber"), params.getCaseNumber()));
}
if(params.getCaseStatusIds() != null){
List<String> caseStatusIds = new ArrayList<String>();
caseStatusIds = params.getCaseStatusIds();
for(int i=0 ; i<caseStatusIds.size() ; i++){
criteria.add(cb.or(cb.equal(root.get("caseStatusByCaseStatusId"), Integer.valueOf(params.getCaseStatusIds().get(i)))));
}
}
}
cq.select(root).where(cb.and(criteria.toArray(new Predicate[0])));
return cq;
}
这是SQL形式的查询结果
select something from TABLENAME as something where ( something.caseNumber=:param0 ) and ( something.caseStatusByCaseStatusId=1 ) and ( something.caseStatusByCaseStatusId=-1 ) and ( something.caseStatusByCaseStatusId=1 ) and ( something.caseStatusByCaseStatusId=9 ) and ( something.caseStatusByCaseStatusId=4 ) and ( something.caseStatusByCaseStatusId=5 ) and ( something.caseStatusByCaseStatusId=10 ) and ( something.caseStatusByCaseStatusId=2 ) order by something.caseNumber desc
预期的查询是这样的
select something from TABLENAME as something where ( something.caseNumber=:param0 ) and ( something.caseStatusByCaseStatusId=1 or something.caseStatusByCaseStatusId=-1 or something.caseStatusByCaseStatusId=1 or something.caseStatusByCaseStatusId=9 or something.caseStatusByCaseStatusId=4 or something.caseStatusByCaseStatusId=5 or something.caseStatusByCaseStatusId=10 or something.caseStatusByCaseStatusId=2 ) order by something.someCriteria desc
如何处理我的代码以获得预期的查询结果?如果您需要其他详细信息,我会立即更新。
【问题讨论】: