【问题标题】:JPA CriteriaQuery order by with two criteriaJPA CriteriaQuery order by 有两个条件
【发布时间】:2017-10-03 09:59:12
【问题描述】:

我需要在 orderBy 子句中使用此语句构建一个条件查询:

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

谁能帮帮我?

【问题讨论】:

  • order by 子句应该在查询的最后,并且 CASE 应该有 ELSE 和 END。例如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 ELSE NULL END

标签: java hibernate jpa criteriaquery


【解决方案1】:

它只需要一个 .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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    相关资源
    最近更新 更多