No sé cómo hacer que la consulta de criterios JAP termine con un resultado booleano.¿Cómo determinar correctamente si una cláusula de consulta de criterios JPA "existente" devuelve verdadero o falso?
El objetivo es tener una consulta criterios que tiene este aspecto cuando se representa en Oracle:
select 1 from dual where exists (...);
El where exists (...)
parte que hice con una subconsulta, estoy luchando con la consulta externa.
Y el uso práctico de esto es determinar si esa subconsulta en la cláusula exists
devolvió true
o false
.
Esto es lo que tengo:
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Object> query = criteriaBuilder.createQuery();
query.from(Boolean.class);
query.select(criteriaBuilder.literal(true));
Subquery<Location> subquery = query.subquery(Location.class);
Root<Location> subRootEntity = subquery.from(Location.class);
subquery.select(subRootEntity);
Path<?> attributePath = subRootEntity.get("State");
Predicate predicate = criteriaBuilder.equal(attributePath, criteriaBuilder.literal("TX"));
subquery.where(predicate);
query.where(criteriaBuilder.exists(subquery));
TypedQuery<Object> typedQuery = em.createQuery(query);
Pero la última línea de falla diciendo booleana no es una entidad. Creo que no se sabe cómo expresar la parte "de" de la consulta porque el resultado sería 1 o 0, verdadero o falso, y no una entidad.
Sé que podría recuperar cualquier entidad y luego verificar si la lista de resultados tiene el tamaño 1, pero estoy tratando de aprender cómo obtener un resultado booleano para evitar la tarea innecesaria de recuperar esas columnas y también para aprender cómo hacerlo.
¿Es esto posible en absoluto?
Gracias! Eduardo
No, no lo puede hacer directamente, sino que es una forma común para comprobar si la cuenta de resultado es decir establecer si el recuento es mayor que cero, entonces la verdadera cosa falsa. – Shahzeb