繁体   English   中英

JPA Criteria使用两个条件查询订单

[英]JPA CriteriaQuery order by with two criteria

我需要在orderBy子句中使用此语句构建一个criteriaQuery:

ORDER BY COL.NOMCOL ASC,
CASE COL.TDN_ECO 
    WHEN TO_CHAR(5381) THEN 1 
    WHEN TO_CHAR(5380) THEN 2 
    WHEN TO_CHAR(5383) THEN 3
    WHEN TO_CHAR(5382) THEN 4
    WHEN TO_CHAR(5384) THEN 5

我尝试了这个:

List<Order> orderList = new ArrayList<Order>();
orderList.add(cb.asc(cb.selectCase().when(cb.equal(root.get("tdnEco"), ConstantesCliente.TIPO_DOMINIO_APROBADO), 1).when(cb.equal(root.get("tdnEco"), ConstantesCliente.TIPO_DOMINIO_ABIERTO), 2)
                .when(cb.equal(root.get("tdnEco"), ConstantesCliente.TIPO_DOMINIO_PTE_TRAMITE), 3).when(cb.equal(root.get("tdnEco"), ConstantesCliente.TIPO_DOMINIO_RECHAZADO), 4)
                .when(cb.equal(root.get("tdnEco"), ConstantesCliente.TIPO_DOMINIO_RECHAZADO), 5)));

orderList.add(cb.asc(root.get("nomCol")));

query.orderBy(orderList);

但给我以下错误。

java.lang.reflect.InvocationTargetException org.hibernate.jpa.criteria.expression.SearchedCaseExpression:125

谁能帮我?

它只需要一个.otherwise()子句即可正常工作,因此答案是:

List<Order> orderList = new ArrayList<Order>();
    orderList.add(cb.asc(cb.selectCase().when(cb.equal(root.get("tdnEco"), ConstantesCliente.TIPO_DOMINIO_APROBADO), 1).when(cb.equal(root.get("tdnEco"), ConstantesCliente.TIPO_DOMINIO_ABIERTO), 2)
            .when(cb.equal(root.get("tdnEco"), ConstantesCliente.TIPO_DOMINIO_PTE_TRAMITE), 3).when(cb.equal(root.get("tdnEco"), ConstantesCliente.TIPO_DOMINIO_RECHAZADO), 4)
            .when(cb.equal(root.get("tdnEco"), ConstantesCliente.TIPO_DOMINIO_RECHAZADO), 5).otherwise(6)));

    orderList.add(cb.asc(root.get("nomCol")));

    query.orderBy(orderList);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM