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.Numbergü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 Bookskapalı adıdır classveritabanı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 Numberbazı veritabanları dönecektir olmasıdır Longdiğerleri dönecektir ise BigIntegerbir çevrim daha iyi şekilde taşınabilirlik uğruna, Numberve bir alma intveya longsize sayılacak bekliyoruz kaç satır bağlı.