【发布时间】:2019-10-12 15:39:05
【问题描述】:
我正在尝试将我的查询转换为我遇到问题的标准。以下是我要转换的查询
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 子句未出现在查询中。如何在查询中添加它?
【问题讨论】:
标签: hibernate spring-boot jpa criteria