Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 《少年警讯准则》;为空或不在“中”;_Jpa_Openjpa_Criteriaquery - Fatal编程技术网

Jpa 《少年警讯准则》;为空或不在“中”;

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

我正在尝试使用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(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!