Jpa 《少年警讯准则》;为空或不在“中”;
我正在尝试使用OpenJPA 2.4.0构建与以下SQL where子句等效的CriteriaQuery:Jpa 《少年警讯准则》;为空或不在“中”;,jpa,openjpa,criteriaquery,Jpa,Openjpa,Criteriaquery,我正在尝试使用OpenJPA 2.4.0构建与以下SQL where子句等效的CriteriaQuery: where employee_status is null or employee_status not in ('Inactive','Terminated') 我已经创建了一个EmployeeStatus列表,下面是我添加谓词的方式: predicates.add( criteriaBuilder.or( criteriaBuilder.isNull(domainE
where employee_status is null or employee_status not in ('Inactive','Terminated')
我已经创建了一个EmployeeStatus列表,下面是我添加谓词的方式:
predicates.add(
criteriaBuilder.or(
criteriaBuilder.isNull(domainEntity.get("employeeStatus")),
criteriaBuilder.not(domainEntity.get("employeeStatus").in(employeeStatuses))
)
);
生成的SQL如下所示:
AND (t0.EMPLOYEE_STATUS IS NULL OR NOT (t0.EMPLOYEE_STATUS = ? OR t0.EMPLOYEE_STATUS = ?) AND t0.EMPLOYEE_STATUS IS NOT NULL)
如您所见,“not in”语句正在转换为多重比较,并在末尾添加了“t0.EMPLOYEE_STATUS is not NULL”。为了使其工作,翻译后的子句应该包含在另一组括号中
关于如何实现这一点,您有什么想法吗?“and”的优先级高于“or”,因此生成的查询是正确的,并且与您需要的相同。这里不需要括号啊,我明白了。谢谢mangusta!