2011-12-30 34 views
7

Estoy tratando de obtener solo el recuento de las filas devueltas en lugar de todos los resultados de la tabla.¿Cómo contar las filas en Hibernate Query Language?

he visto que esto se puede hacer de esta manera:

((Integer) session.createQuery("select count(*) from ....").iterate().next()).intValue() 

Pero cuando se trata de almacenar esta consulta en un formato de número entero (que dice que no se puede convertir de Query to Integer)

estoy usando una consulta dinámica en el que se mencionan los valores por debajo de la consulta como esta

theQuery = "select count(*) from THM as thm " + 
       "join thm.TMC as tmc " + 
       "join tmc.TIMCC as timcc " + 
       "where thm.Qid = :Qid and thm.Cv = :Cv and timcc.Did = :Did and timcc.Cv= :Cv"; 

Query query = session.createQuery(theQuery); 
query.setInteger("Qid", Integer.parseInt(Qid)); 
query.setInteger("Did", Did); 
query.setInteger("Cv",cV); 

Ahora, ¿cómo puedo obtener un recuento de todas las filas devuelto por el uso de consulta de Hibernate en una VA riable sin usar list.size pero directamente desde la consulta?

Respuesta

13

¿Has probado el query.uniqueResult(); ? Como su recuento Select (*) le dará solo un número, debería poder recuperarlo con esto como int count = (Integer) query.uniqueResult();

para contar basa en un criterio que puede hacer esto:

Criteria criteria = currentSession().createCriteria(type); 
criteria.setProjection(Projections.rowCount()); 
criteria.uniqueResult(); 

estoy usando los Criterios de este momento por lo que estoy seguro de que funciona. Vi la solución uniqueResult() en un sitio web en: http://www.jroller.com/RickHigh/entry/hibernate_pagination_jsf_datagrid_prototype1

+0

query.uniqueResult(); funciona muy bien y también lo hace .iterate(). next()) .intValue() – user1002782

+0

¿Qué pasa si mi consulta no es Seleccionar conteo (*) sino que comienza como "de THM" – Jerry

7

puede hacerlo

long count = (long)session.createQuery("SELECT COUNT(e) FROM Employees e").getSingleResult(); 
6

intentarlo.

Long count = ((Long) session.createQuery("select count(*) from Book").uniqueResult()); 
Integer totalBooks = count.intValue(); 
Cuestiones relacionadas