Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在jpa中选择带有order by的案例_Java_Mysql_Hibernate_Jpa - Fatal编程技术网

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

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

这是我的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 ,
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);