2009-09-03 10 views

Respuesta

287

Suponiendo que el nombre de la clase es del libro:

return (Number) session.createCriteria("Book").setProjection(Projections.rowCount()).uniqueResult(); 

es por lo menos un Number, muy probablemente un Long.

+10

Devuelve un largo. –

+9

Como @Salandur sugiere, "Es al menos un número", y el tipo de número tiene "intValue()", "longValue() "métodos, para que podamos obtener fácilmente el tipo primitivo deseado que queremos: ((Number) criteria.uniqueResult()). intValue() –

+0

Devuelve un tipo de 'Objeto'. – Lion

12

Usted podría intentar count(*)

Integer count = (Integer) session.CreateQuery("select count(*) from Books").uniqueResult(); 

Dónde Books es el nombre de la class - no la tabla en la base de datos.

+0

+1 para la respuesta que está de acuerdo con. – KLE

+6

Parece sospechosamente .net para mí ... – skaffman

+0

lo siento, pero no está funcionando con Java e Hibernate :( (Reemplacé int con Integer, ya que está en Java para el tipo de conversión) – craftsman

96

En Java i en general tienen que volver int y el uso de esta forma:

int count = ((Long)getSession().createQuery("select count(*) from Book").uniqueResult()).intValue(); 
+1

La respuesta aceptada para esta pregunta no funcionó para mí, pero la tuya sí. ¡Gracias! –

+0

¿es esta la manera más rápida y económica de obtener el conteo de una consulta? me refiero a hibernate-wise – kommradHomer

+54

¿De qué sirve usar un ORM si terminamos codificando SQL de todos modos? – thermz

40

Esto es lo que official hibernate docs tell nosotros en esto:

Se puede contar el número de resultados de la consulta sin devolverlos:

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

Sin embargo, no siempre devuelve la instancia Integer, por lo que es mejor usar java.lang.Number para mayor seguridad.

+1

+1 por una respuesta que proporcione el método recomendado por el equipo de Hibernate. – Tom

+1

Esto funcionó para mí. – abbas

+3

Para mí esto dio "java.lang.ClassCastException: java.lang.Long no se puede convertir a java.lang.Integer", pero a cambio funciona en tiempo largo ... – rogerdpack

6

Long count = (Long) session.createQuery("select count(*) from Book") .uniqueResult();

+1

pellizcada su respuesta para agregar la nota de rendimiento – rajadilipkolli

+0

debe ser ''' Cuenta larga = (Largo) session.createQuery ("select count (1) from Book"). uniqueResult(); '' 'mejorará el rendimiento – rajadilipkolli

6

Si está usando Hibernate 5+, a continuación, consulta será modificado como

Long count = session.createQuery("select count(1) from Book") 
        .getSingleResult(); 

o si necesita TypedQuery

Long count = session.createQuery("select count(1) from Book",Long.class) 
         .getSingleResult(); 
Cuestiones relacionadas