1

I need to build a criteriaQuery with this statement in the orderBy clause:

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

I tried this:

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);

but is giving me the following error.

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

Can anyone help me?

Julia
  • 538
  • 2
  • 7
  • 17
  • order by clause should be at the last of the query and there should be ELSE and END for CASE. example `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` – Nidhi257 Oct 03 '17 at 10:07

1 Answers1

0

It just needed an .otherwise() clause to work properly, so the answer is:

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);
Julia
  • 538
  • 2
  • 7
  • 17