首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA规范首先按特定值排序

JPA规范首先按特定值排序
EN

Stack Overflow用户
提问于 2020-07-07 17:09:36
回答 2查看 811关注 0票数 1

我正在使用JPA规范为我的Spring启动应用程序检索数据。

我有一个如下所示的mySQL查询来获取我想要的列表:

代码语言:javascript
复制
select *
from TableA
order by colB = 'C' DESC, colB;

结果:

代码语言:javascript
复制
no    | colB
3     |  C
1     |  A
2     |  B
4     |  D

我的问题是,是否有可能转换为JPA规范?我已经到处找过了,但是找不到我想要的。

代码语言:javascript
复制
     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()
    );
EN

回答 2

Stack Overflow用户

发布于 2020-07-10 04:55:42

JPA中没有对应的查询,因为它是特定于供应商的。正如crizzis所说,您可以做的是创建一个ORDER BY CASE子句。例如:

代码语言:javascript
复制
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查询。

票数 0
EN

Stack Overflow用户

发布于 2020-07-13 21:49:25

我还没有测试过,但是你可以尝试下面这样的东西!

代码语言:javascript
复制
tableARepo.findAllByColBByOrderByColBDesc(col_b_type col_b_parameter)

或者也许

代码语言:javascript
复制
tableARepo.findAllByColBByOrderByColBDesc(String colB)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62771785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档