JPA CriteriaQuery order by 有两个条件
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);
我需要在 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);