Jawaban:
Untuk versi Hibernate yang lebih lama (<5.2):
Dengan asumsi nama kelas adalah Buku:
return (Number) session.createCriteria("Book")
.setProjection(Projections.rowCount())
.uniqueResult();
Paling tidak itu adalah Number, kemungkinan besar a Long.
return (Number) session.createCriteria(Book.class).setProjection(Projections.rowCount()).uniqueResult();
Di Jawa saya biasanya perlu mengembalikan int dan menggunakan formulir ini:
int count = ((Long)getSession().createQuery("select count(*) from Book").uniqueResult()).intValue();
Inilah yang dikatakan dokumen hibernate resmi kepada kami tentang hal ini:
Anda dapat menghitung jumlah hasil permintaan tanpa mengembalikannya:
( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue()
Namun, tidak selalu mengembalikan Integerinstance, jadi lebih baik digunakan java.lang.Numberuntuk keselamatan.
org.hibernate.dialect.function.StandardAnsiSqlAggregationFunctions.CountFunction( StandardBasicTypes.LONG )
Kamu bisa mencoba count(*)
Integer count = (Integer) session.createQuery("select count(*) from Books").uniqueResult();
Di mana Booksnama dari class- bukan tabel dalam database.
Jika Anda menggunakan Hibernate 5+, maka kueri akan diubah sebagai
Long count = session.createQuery("select count(1) from Book")
.getSingleResult();
Atau jika Anda Membutuhkan TypedQuery
Long count = session.createQuery("select count(1) from Book",Long.class)
.getSingleResult();
Long count = (Long) session.createQuery("select count(*) from Book").uniqueResult();
Ini berfungsi di Hibernate 4 (Diuji).
String hql="select count(*) from Book";
Query query= getCurrentSession().createQuery(hql);
Long count=(Long) query.uniqueResult();
return count;
Di mana getCurrentSession () adalah:
@Autowired
private SessionFactory sessionFactory;
private Session getCurrentSession(){
return sessionFactory.getCurrentSession();
}
Ini sangat mudah, jalankan saja permintaan JPQL berikut:
int count = (
(Number)
entityManager
.createQuery(
"select count(b) " +
"from Book b")
.getSingleResult()
).intValue();
Alasan kami melakukan casting Numberadalah karena beberapa database akan kembali Longsementara yang lain akan kembali BigInteger, jadi demi portabilitas Anda lebih baik melakukan casting ke Numberdan mendapatkan sebuah intatau long, tergantung pada berapa banyak baris yang Anda harapkan akan dihitung.