जवाबों:
हाइबरनेट के पुराने संस्करणों के लिए (<5.2):
वर्ग का नाम मानते हुए पुस्तक है:
return (Number) session.createCriteria("Book")
.setProjection(Projections.rowCount())
.uniqueResult();
यह कम से कम एक है Number, सबसे अधिक संभावना है Long।
return (Number) session.createCriteria(Book.class).setProjection(Projections.rowCount()).uniqueResult();
जावा में मुझे आम तौर पर इंट वापस जाने और इस फॉर्म का उपयोग करने की आवश्यकता होती है:
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।
यदि आप हाइबरनेट 5+ का उपयोग कर रहे हैं, तो क्वेरी को संशोधित किया जाएगा
Long count = session.createQuery("select count(1) from Book")
.getSingleResult();
या यदि आपको TypedQuery की आवश्यकता है
Long count = session.createQuery("select count(1) from Book",Long.class)
.getSingleResult();
Long count = (Long) session.createQuery("select count(*) from Book").uniqueResult();
यह हाइबरनेट 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और एक intया एक longके आधार पर, आप कितनी पंक्तियों की गिनती के आधार पर उम्मीद कर रहे हैं।