2011-11-29 13 views
8

मान लीजिए कि मेरे पास एक टेबल व्यक्ति है और मैं उन सभी लोगों को गिनना चाहता हूं जिनके "जन्मदिन" शून्य नहीं हैं और वे छात्र हैं। मान लिया जाये कि मैं दो कॉलम है:कुछ मानदंडों के साथ हाइबरनेट गिनती पंक्तियां

birthDate Date (can be null) 
isStudent boolean (default: false) 

हाइबरनेट इस का उपयोग करते हुए मैं क्या कर सकता हूं कैसे ..?

+1

क्या आप की कोशिश की है काम कर रहा है? यह एक मूलभूत क्वेरी है। क्या आपने हाइबरनेट दस्तावेज पढ़ा है? http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/queryhql.html –

उत्तर

28
Criteria crit = session.createCriteria(Person.class); 
crit.add(Restrictions.isNotNull("birthDate")); 
crit.add(Restrictions.eq("isStudent", true)); 
crit.setProjection(Projections.rowCount()); 
Integer count = (Integer)crit.uniqueResult(); 
+0

क्या होगा यदि वह एक ही प्रश्न में isDropout की गिनती देखना चाहता था? – Stephane

+1

यदि आप दो स्वतंत्र गणना चाहते हैं तो आपको या तो संघ या उप-क्वेरी का उपयोग करना होगा और इस प्रकार हाइबरनेट में कुछ अलियासिंग करना होगा। क्योंकि आपको विशिष्ट मानदंडों पर समूह करने की आवश्यकता है – Lawrence

13
Criteria crit = session.createCriteria(Person.class); 
crit.add(Restrictions.isNotNull("birthDate")); 
crit.add(Restrictions.eq("isStudent", true)); 
List<Person> students = crit.list(); 
Integer count = students.size(); 

या यदि बस एक ही गिनती मूल्य चाहते हैं, और कोई सूची नहीं लौटाई गई:

Criteria crit = session.createCriteria(Person.class); 
crit.setProjection(Projections.rowCount()); 
crit.add(Restrictions.isNotNull("birthDate")); 
crit.add(Restrictions.eq("isStudent", true)); 
return (Long) crit.uniqueResult(); 
+1

आप अपनी सूची को जानने के लिए पूरी सूची ला रहे हैं? बुनियादी एचक्यूएल क्वेरी पर्याप्त होने पर मानदंड का उपयोग क्यों करें? –

+0

@ जेबी निजेट क्योंकि मैं शायद अन्य तर्क – NimChimpsky

+4

के लिए सूची का उपयोग कर रहा हूं, मैं स्ट्रिंग्स को जोड़कर मानदंड पसंद करता हूं, अगर आप एक स्ट्रिंग के रूप में एसक्यूएल लिखते हैं, तो हाइबरनेट के उद्देश्य को हरा देता है। – NimChimpsky

3
Number count = (Number) session.createQuery(
    "select count(p.id) from Person p" 
    + " where p.birthDate is not null and p.isStudent = true").uniqueResult(); 
0

यह प्रयोग करें। यह

public class IncIncidentListGridModel 
{ 

    private String historyStatus = null; 

    public String getHistoryStatus() 
    { 
     return historyStatus; 
    } 

    public void setHistoryStatus(String historyStatus) 
    { 
     this.historyStatus = historyStatus; 
    } 

    public void run() 
    { 
     IncIncidentListGridModel resultCount = 
      (IncIncidentListGridModel) ((SQLQuery) hibersession 
       .createSQLQuery("select count(ch.incident_capa_history_id) as historyStatus from incident_capa_history ch, incident_capa ic where ic.incident_capa_id = ch.FK_incident_capa_id and ic.incident_capa_id='011'")) 
       .addScalar("historyStatus", Hibernate.STRING) 
       .setResultTransformer(
        Transformers.aliasToBean(IncIncidentListGridModel.class)) 
       .uniqueResult(); 

     System.out.println("count result" + resultCount.getHistoryStatus()); 
    } 
} 
+1

की संख्या कृपया उत्तर के केवल हिस्सों को ही सही तरीके से प्रारूपित करें। – konqi

+1

"इसका इस्तेमाल करें। यह काम कर रहा है" एक उपयोगी टिप्पणी नहीं है। कोई क्यों मानता है कि पोस्ट किया गया उत्तर काम नहीं करेगा? –

1
int result= (int)((long)session.createQuery("select count(p) from User p where p.mobileNumber = :pMobileNumber") 
       .setParameter("pMobileNumber", mobileNumber).uniqueResult()); 
संबंधित मुद्दे