我正在使用JPA规范来检索我的Spring启动应用程序的数据。
我有一个如下的mySQL查询,以获得我想要的列表:
select *
from TableA
order by colB = 'C' DESC, colB;
结果:-
no | colB
3 | C
1 | A
2 | B
4 | D
我的问题是,可以转换为JPA规范吗?我已经环顾四周,但找不到我想要的东西。
Page<Object> page = tableARepository.findAll(
(Specification<Object>) (root, criteriaQuery, criteriaBuilder) -> {
List<Predicate> predicates = new ArrayList<>();
if (sortConfig.getSpecification() != null) {
Predicate predicate = sortConfig.getSpecification().toPredicate(root, criteriaQuery, criteriaBuilder);
predicates.add(predicate);
}
return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
},
sortConfig.getPageable()
);
答案 0 :(得分:0)
此查询在JPA中没有等效项,因为它是特定于供应商的。正如crizzis所说,您可以做的是创建ORDER BY CASE子句。例如:
ORDER BY
CASE
-- First condition with higher priority
WHEN priority = 1 AND situation_id = 2 THEN 1
-- Second condition with less priority
WHEN situation_id = 1 THEN 2
-- Third condition
WHEN priority = 0 AND situation_id = 2 THEN 3
-- Fourth condition
WHEN situation_id = 3 THEN 4
END,
-- Second ordering column
creation_date DESC
然后使用它创建一个JPQL查询。
答案 1 :(得分:0)
我尚未测试,但您可以尝试以下类似方法!
tableARepo.findAllByColBByOrderByColBDesc(col_b_type col_b_parameter)
或者也许
tableARepo.findAllByColBByOrderByColBDesc(String colB)