Estoy construyendo mi primera aplicación web Java EE usando Glassfish y JSF. Soy bastante nuevo en la consulta de criterios y tengo una consulta que debo realizar, pero el tutorial de javaee6 parece un poco escaso en los ejemplos. De todos modos, estoy teniendo dificultades para crear la consulta.Necesito ayuda para crear la consulta de criterios JPA
Objetivo: Quiero sacar a la compañía con la mayor cantidad de documentos almacenados. Las empresas tienen una relación de OneToMany con los documentos. Documents tiene una relación ManyToOne con varias tablas, la columna "usertype" las distingue.
MySQL consulta:
SELECT USERID, COUNT(USERID) AS CNT
FROM DOCUMENTS
WHERE USERTYPE="COMPANY"
GROUP BY USERID
ORDER BY CNT DESC
Gracias
--update-- base en la retroalimentación del usuario, esto es lo que tengo hasta ahora:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Documents> cqry = cb.createQuery(Documents.class);
//Intersting Stuff
Root<Documents> root = cqry.from(Documents.class);
Expression userid = root.get("userID");
Expression usertype = root.get("userType");
Expression count = cb.count(userid);
cqry.multiselect(userid, count);
Predicate userType = cb.equal(usertype, "COMPANY");
cqry.where(userType);
cqry.groupBy(userid);
cqry.orderBy(cb.desc(count));
//more boilerplate
Query qry = em.createQuery(cqry);
List<Documents> results = qry.getResultList();
El error que consigo es :
Exception Description: Partial object queries are not allowed to maintain the cache or be edited. You must use dontMaintainCache().
¡Error típico, no significa nada para mí!
Intente eliminar el tipeo de la consulta de CriteriaQuery a CriteriaQuery para seleccionar el recuento sin ofender la API. Si también publicas más información sobre las tablas/entidades, puedo probar otras formas. –
perissf