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 Integer
instance, jadi lebih baik digunakan java.lang.Number
untuk 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 Books
nama 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 Number
adalah karena beberapa database akan kembali Long
sementara yang lain akan kembali BigInteger
, jadi demi portabilitas Anda lebih baik melakukan casting ke Number
dan mendapatkan sebuah int
atau long
, tergantung pada berapa banyak baris yang Anda harapkan akan dihitung.