我正在尝试使用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'最后添加。为了使其起作用,翻译的子句应该包含在另一组括号中。
关于如何让它发挥作用的任何想法?