Я пытаюсь создать эквивалент 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 'добавлено в конце.Чтобы это работало, переведенное предложение должно содержаться в другом наборе скобок.
Есть идеи о том, как я могу заставить это работать?