gpt4 book ai didi

java - 在 jpa 中选择带有 order by 的案例

转载 作者:行者123 更新时间:2023-11-29 01:20:03 25 4
gpt4 key购买 nike

SELECT * FROM orderTable order by 
CASE priority when 'CRITICAL' THEN 1
when 'HIGH' then 2
when 'MEDIUM' then 3
when 'LOW' then 4
when 'NOT_ASSIGNED' then 5
end ASC ,
CreatedAt ASC;

这是我的 mysql 查询及其工作。数据库列 priority 是字符串类型并且该字符串具有以下优先级

我想要像jpa这样的语言

CriteriaBuilder cb = em.getCriteriaBuilder();       
CriteriaQuery<T> cq = cb.createQuery(entityClass);
Root<T> root = cq.from(entityClass);
cb.selectCase().when(cb.equal(root.get("priority"), "CRITICAL"), 1)
.when(cb.equal(root.get("priority"), "HIGH"), 2)
.when(cb.equal(root.get("priority"), "MEDIUM"), 3)
.when(cb.equal(root.get("priority"), "LOW"), 4)
.when(cb.equal(root.get("priority"), "NOT_ASSIGNED"), 5).;
Order temp2 = cb.desc(root.get("priority"));
cq = cq.orderBy(temp2);

这是行不通的,它只返回按字符串优先级排序的结果。选择案例不适用于标准构建查询。

最佳答案

您使用 cb.desc(root.get("priority")); 行选择原始的“优先级”。注意,在您的第一个示例中,您使用 asc 和第二个 desc。我还添加了一个默认案例。

    CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<TableTest> cq = cb.createQuery(TableTest.class);
Root<TableTest> root = cq.from(TableTest.class);
Expression<Object> caseExpression = cb.selectCase()
.when(cb.equal(root.get("priority"), cb.literal("CRITICAL")), 1)
.when(cb.equal(root.get("priority"), cb.literal("HIGH")), 2)
.when(cb.equal(root.get("priority"), cb.literal("MEDIUM")), 3)
.when(cb.equal(root.get("priority"), cb.literal("LOW")), 4)
.when(cb.equal(root.get("priority"), cb.literal("NOT_ASSIGNED")), 5)
.otherwise(6);
Order temp2 = cb.desc(caseExpression);
cq = cq.orderBy(temp2);

关于java - 在 jpa 中选择带有 order by 的案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42633141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com