JPA规范首先按特定值排序

时间:2020-07-07 09:09:35

标签: spring jpa spring-data-jpa spring-data

我正在使用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()
    );

2 个答案:

答案 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)
相关问题