2013-02-28 5 views
5

मैं एमबी एसक्यूएल सर्वर 2008 का उपयोग हाइबरनेट के साथ कर रहा हूं। मेरे पास सवाल यह है कि कैसे Hibernate लागू करता है setMaxResultsहाइबरनेट में setMaxResults (N) कैसे काम करता है?

निम्नलिखित सरल परिदृश्य लें।

यदि मेरे पास कोई पंक्ति है जो 100 पंक्तियां लौटाती है और यदि मैं 1 से setMaxResults पास करता हूं, तो यह SQL सर्वर से लौटाए गए परिणाम को प्रभावित करेगा (जैसे select top 1 कथन चला रहा है) या हाइबरनेट को पहले सभी परिणाम मिलते हैं (सभी इस मामले में 100 पंक्तियां) और शीर्ष को स्वयं चुनें?

कारण मैं पूछ रहा हूं कि पंक्तियों की संख्या बढ़ने पर इसका एक बड़ा प्रदर्शन मुद्दा होगा।

धन्यवाद।

उत्तर

3

बंद करने का ख्याल रखना हाइबरनेट एक सीमा प्रकार क्वेरी उत्पन्न होगा होगा, कर रहे हैं। चूंकि SQLServerDialect इसका समर्थन करता है (org.hibernate.dialect.SQLServerDialect.supportsLimit(), और .getLimitString() देखें), आपको select top 1 -query मिलेगा।

यदि आप पूर्ण रूप से सुनिश्चित करना चाहते हैं, तो आप डीबग-लॉगिंग चालू कर सकते हैं, या showSql-विकल्प और परीक्षण सक्षम कर सकते हैं।

+0

धन्यवाद, यही वह है जिसे मैं ढूंढ रहा था। बात यह है कि, मैंने डीबग आउटपुट की जांच की है, यह वास्तव में 'चयन शीर्ष 1' का उपयोग कर रहा है। – user624558

0

स्निपेट निम्नलिखित मदद कर सकता है। मान लें कि हमारे पास एक प्रबंधित बीन क्लास EmpBean है और हम केवल पहले 5 रिकॉर्ड चाहते हैं। तो निम्न कोड

public List<EmpBean> getData() 
{ 
    Session session = null; 
    try 
    { 
     session = HibernateUtil.getSession(); 
     Query qry = session.createQuery("FROM EmpBean"); 
     qry.setMaxResults(5); 
     return qry.list(); 
    } 
    catch(HibernateException e) 
    {} 
    finally 
    {   
     HibernateUtil.closeSession(session); 
    } 
    return null; 
} 

यहाँ getSession और closeSession स्थिर उपयोगिता तरीकों जो सभी बोलियों जो सीमा प्रश्न का समर्थन करता है के लिए बनाने और सत्र

+0

उत्तर के लिए धन्यवाद लेकिन मैं इस दृश्य के पीछे 'setMaxResults' कैसे लागू किया गया है, इस बारे में एक स्पष्टीकरण की तलाश कर रहा था। @Aleksander Blomskøld के उत्तर से जवाब प्राप्त करें। – user624558

संबंधित मुद्दे