JPA Критерии "НУЛЬ ИЛИ НЕ В" - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь создать эквивалент CriteriaQuery из следующего предложения SQL where, используя OpenJPA 2.4.0:

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)

Как видите, оператор not in трансформируется в несколько сравнений с помощью t0.EMPLOYEE_STATUS ISNOT NULL 'добавлено в конце.Чтобы это работало, переведенное предложение должно содержаться в другом наборе скобок.

Есть идеи о том, как я могу заставить это работать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...