2011-12-30 17 views
7

Sto cercando di ottenere solo il conteggio delle righe restituite anziché tutti i risultati della tabella.Come contare le righe in Hibernate Query Language?

ho visto che questo può essere fatto in questo modo:

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

Ma quando si cerca di salvare la query in un formato intero (si dice non può convertire da Query to Integer)

Sto usando una query dinamica dove saranno indicati i valori al di sotto della query come questa

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); 

Ora, come posso ottenere un conteggio di tutte le righe restituite utilizzando query di Hibernate in un VA Riable senza utilizzare list.size ma direttamente dalla query?

risposta

13

Hai provato la query.uniqueResult(); ? Siccome il tuo conteggio di selezione (*) ti darà solo un numero, dovresti essere in grado di recuperarlo con questo come int count = (Integer) query.uniqueResult();

contare basa su un criteri si può fare questo:

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

sto usando i criteri in questo momento quindi so per certo che funziona. Ho visto la soluzione uniqueResult() su un sito web qui: http://www.jroller.com/RickHigh/entry/hibernate_pagination_jsf_datagrid_prototype1

+0

query.uniqueResult(); sta funzionando benissimo e così fa .iterate(). next()) .intValue() – user1002782

+0

Cosa succede se la mia query non è Select count (*) invece inizia come "from THM" – Jerry

7

si può fare questo

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

provarlo.

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