Yanıtlar:
Hazırda Bekletme modunun eski sürümleri için (<5.2):
Sınıf adının Kitap olduğunu varsayarsak:
return (Number) session.createCriteria("Book")
.setProjection(Projections.rowCount())
.uniqueResult();
En azından bir Number
, büyük olasılıkla bir Long
.
return (Number) session.createCriteria(Book.class).setProjection(Projections.rowCount()).uniqueResult();
Java genellikle int dönmek ve bu formu kullanmanız gerekir:
int count = ((Long)getSession().createQuery("select count(*) from Book").uniqueResult()).intValue();
Resmi hazırda bekletme belgelerinin bize bu konuda söyledikleri :
Sorgu sonuçlarının sayısını döndürmeden sayabilirsiniz:
( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue()
Ancak, her zaman Integer
örnek döndürmez , bu nedenle java.lang.Number
güvenlik için kullanmak daha iyidir .
org.hibernate.dialect.function.StandardAnsiSqlAggregationFunctions.CountFunction
( StandardBasicTypes.LONG )
Deneyebilirsin count(*)
Integer count = (Integer) session.createQuery("select count(*) from Books").uniqueResult();
Nerede Books
kapalı adıdır class
veritabanında değil tablo -.
Hibernate 5+ kullanıyorsanız, sorgu şu şekilde değiştirilecektir:
Long count = session.createQuery("select count(1) from Book")
.getSingleResult();
Veya TypedQuery'ye ihtiyacınız varsa
Long count = session.createQuery("select count(1) from Book",Long.class)
.getSingleResult();
Long count = (Long) session.createQuery("select count(*) from Book").uniqueResult();
Bu, Hazırda Bekletme 4'te (Test Edildi) çalışır.
String hql="select count(*) from Book";
Query query= getCurrentSession().createQuery(hql);
Long count=(Long) query.uniqueResult();
return count;
GetCurrentSession () nerede:
@Autowired
private SessionFactory sessionFactory;
private Session getCurrentSession(){
return sessionFactory.getCurrentSession();
}
Çok kolay, sadece aşağıdaki JPQL sorgusunu çalıştırın:
int count = (
(Number)
entityManager
.createQuery(
"select count(b) " +
"from Book b")
.getSingleResult()
).intValue();
Biz vermek, yayın nedeni Number
bazı veritabanları dönecektir olmasıdır Long
diğerleri dönecektir ise BigInteger
bir çevrim daha iyi şekilde taşınabilirlik uğruna, Number
ve bir alma int
veya long
size sayılacak bekliyoruz kaç satır bağlı.