JPA标准"是否为空或不在"

时间:2018-06-07 00:06:32

标签: jpa openjpa criteriaquery

我正在尝试使用OpenJPA 2.4.0构建与以下SQL where子句相当的CriteriaQuery:

where employee_status is null or employee_status not in ('Inactive','Terminated')

我创建了一个employeeStatuses列表,这就是我添加谓词的方式:

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)

正如您所看到的,'不在'语句正在被转换为多重比较,其中包括< t0.EMPLOYEE_STATUS IS NOT NULL'最后添加。为了使其起作用,翻译的子句应该包含在另一组括号中。

关于如何让它发挥作用的任何想法?

0 个答案:

没有答案