回答:
古いバージョンのHibernate(<5.2)の場合:
クラス名がBookであると仮定します。
return (Number) session.createCriteria("Book")
.setProjection(Projections.rowCount())
.uniqueResult();
少なくとも、Number
おそらくLong
です。
return (Number) session.createCriteria(Book.class).setProjection(Projections.rowCount()).uniqueResult();
Javaでは通常、intを返し、次の形式を使用する必要があります。
int count = ((Long)getSession().createQuery("select count(*) from Book").uniqueResult()).intValue();
これは公式の休止状態のドキュメントがこれについて私たちに言っているものです:
クエリ結果を返さずに数えることができます:
( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue()
ただし、常にInteger
インスタンスを返すとは限らないjava.lang.Number
ため、安全のために使用することをお勧めします。
org.hibernate.dialect.function.StandardAnsiSqlAggregationFunctions.CountFunction
(StandardBasicTypes.LONG)
あなたは試すことができます count(*)
Integer count = (Integer) session.createQuery("select count(*) from Books").uniqueResult();
データベース内のテーブルではなくBooks
、名前がどこにあるのかclass
。
Long count = (Long) session.createQuery("select count(*) from Book").uniqueResult();
これはHibernate 4(テスト済み)で動作します。
String hql="select count(*) from Book";
Query query= getCurrentSession().createQuery(hql);
Long count=(Long) query.uniqueResult();
return count;
getCurrentSession()は次のとおりです。
@Autowired
private SessionFactory sessionFactory;
private Session getCurrentSession(){
return sessionFactory.getCurrentSession();
}
これは非常に簡単です。次のJPQLクエリを実行するだけです。
int count = (
(Number)
entityManager
.createQuery(
"select count(b) " +
"from Book b")
.getSingleResult()
).intValue();
キャストする理由Number
は、一部のデータベースが返されLong
、他のデータベースが返されるBigInteger
ためです。移植性を高めるために、カウントされると予想される行数に応じNumber
て、aにキャストして、int
またはa を取得するlong
ことをお勧めします。