Java 在jpa中选择带有order by的案例
这是我的mysql查询及其工作原理。数据库列Java 在jpa中选择带有order by的案例,java,mysql,hibernate,jpa,Java,Mysql,Hibernate,Jpa,这是我的mysql查询及其工作原理。数据库列priority是字符串类型,并且该字符串具有以下优先级 我想用jpa语言,比如 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 , Cre
priority
是字符串类型,并且该字符串具有以下优先级
我想用jpa语言,比如
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;
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(entityClass);
Root=cq.from(entityClass);
cb.selectCase().when(cb.equal(root.get(“优先级”),“临界”),1)
.when(cb.equal(root.get(“优先级”),“高”),2)
.when(cb.equal(root.get(“优先级”),“中等”),3)
.when(cb.equal(root.get(“优先级”),“低”),4)
.when(cb.equal(root.get(“优先级”),“未分配”),5。;
顺序temp2=cb.desc(root.get(“优先级”));
cq=cq.orderBy(temp2);
这不起作用,它只返回按字符串优先级排序的结果。select案例不应用于条件生成查询。您使用行
cb.desc(root.get(“优先级”))进行选择代码>原始的“piority”。注意,在第一个示例中,您使用asc和第二个desc。我还添加了一个默认情况
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);
CriteriaBuilder cb=entityManager.getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(TableTest.class);
Root=cq.from(TableTest.class);
表达式caseExpression=cb.selectCase()
.when(cb.equal(root.get(“优先级”)、cb.literal(“临界”)、1)
.when(cb.equal(root.get(“优先级”)、cb.literal(“高”)、2)
.when(cb.equal(root.get(“优先级”)、cb.literal(“中”)、3)
.when(cb.equal(root.get(“优先级”)、cb.literal(“低”)、4)
.when(cb.equal(root.get(“优先级”)、cb.literal(“未分配”)、5)
。否则(6);
顺序temp2=cb.desc(case表达式);
cq=cq.orderBy(temp2);
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);