Я пытаюсь преобразовать свой запрос в критерии, где у меня возникают проблемы. Ниже приведен запрос, который я пытаюсь преобразовать
SELECT
machine_type_id,
machine_type,
user_name
FROM
nc_machine_types
WHERE
CASE
WHEN
TRIM(':q') = ''
OR ':q' IS NULL
THEN
machine_type IS NOT NULL
ELSE (machine_type = ':q'
OR machine_type_id = (SELECT
machine_type_id
FROM
nc_machine_screen
WHERE
machine_no = ':q'))
END
Предикат, который я могу преобразовать сейчас,
return new Specification<MachineType>() {
@Override
public Predicate toPredicate(Root<MachineType> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List<Predicate> predicates = new ArrayList<>();
if(!StringUtils.isBlank(q)) {
Subquery<Long> ordersSubquery = query.subquery(Long.class);
Root rootB = ordersSubquery.from(Mahine.class);
ordersSubquery.select(rootB.get("machineType").get("machineTypeId"));
ordersSubquery.where(cb.equal(rootB.get("machineNo"), q));
predicates.add(cb.equal(root.get("machineType"), q));
cb.or(cb.equal(root.get("machineId"), ordersSubquery));
}
return cb.and(predicates.toArray(new Predicate[0]));
}
};
Запрос, который создается, похож на
select machine_type_id, user_name, machine_type from machine_types where machine_type=?
Предложение OR
не приходит в запросе. Как я могу добавить его в запрос?