web-dev-qa-db-ja.com

Hibernateクエリ言語で行をカウントする方法は?

テーブルからのすべての結果ではなく、返された行の数だけを取得しようとしています。

私はこれが次のようにできることを見ました:

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

しかし、このクエリを整数形式で保存しようとすると(Query to Integerから変換できないと表示されます)

私は動的クエリを使用しており、値はこのようなクエリの下に記載されます

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

さて、list.sizeを使用せずに、クエリから直接、変数でHibernateクエリを使用して返されたすべての行のカウントを取得するにはどうすればよいですか?

8
user1002782

Query.uniqueResult();を試しましたか? ? Select count(*)では1つの数値しか得られないため、int count =(Integer)query.uniqueResult();のように次のように取得できるはずです。

基準に基づいてカウントするには、次のようにします。

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

私は現在Criteriaを使用しているので、それが機能することは確かです。私はここのウェブサイトでuniqueResult()ソリューションを見ました: http://www.jroller.com/RickHigh/entry/hibernate_pagination_jsf_datagrid_prototype1

14
adreide

あなたはこれを行うことができます

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

それを試してみてください。

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

私のために働く

int list=(int) 
sessionFactory.getCurrentSession().createSQLQuery("select count(*) as count from 
                         Book").addScalar("count",IntegerType.INSTANCE).uniqueResult();
3
Neetz