जवाबों:
हाइबरनेट के पुराने संस्करणों के लिए (<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
के आधार पर, आप कितनी पंक्तियों की गिनती के आधार पर उम्मीद कर रहे हैं।