2012-01-19 22 views
18

? और सामान्य मानदंडों के बजाय पृथक मानदंडों का उपयोग करके हमें क्या लाभ मिलता है?हाइबरनेट में पृथक मानदंडों का उपयोग कब करें? अलग-अलग मानदंडों का उपयोग कब करें

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Some.class); 


DetachedCriteria criteria = DetachedCriteria.forClass(Some.class); 

धन्यवाद!

+1

http://docs.jboss.org/hibernate/core/3.3/reference/en/html /querycriteria.html#querycriteria-detachedqueries – Reddy

उत्तर

16

प्रति docs

कुछ अनुप्रयोग, "अलग मोड" में मापदंड प्रश्नों बनाने के लिए जहां हाइबरनेट सत्र उपलब्ध नहीं है जरूरत के रूप में। यह कक्षा कहीं भी हो सकती है, और फिर को getExecutableCriteria() पर एक सत्र पारित करके एक मानदंड प्राप्त किया जा सकता है। सभी विधियों में अर्थशास्त्र और व्यवहार मानदंड इंटरफ़ेस के संबंधित तरीकों के समान है।

+3

[डॉक्स] से चुराया गया है (https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/criterion/DetachedCriteria.html)। –

10

'सत्र वस्तु से अलग'

अलग मानदंड दो स्थितियों में इस्तेमाल किया जा सकता है:/क्वेरी को निष्पादित प्रस्तुत करने के दौरान
केवल सत्र की आवश्यकता है: कोई सत्र वस्तु के साथ

  1. बिल्डिंग मापदंड क्वेरी क्वेरी बनाने के दौरान डेटाबेस को क्वेरी नहीं।

    पूर्व:

    DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Department.class); 
        detachedCriteria.add(Restrictions.eq("DEPTID", 1)); 
        ProjectionList projectionList = Projections.projectionList(); 
        projectionList.add(Projections.property("DEPTID")); 
        detachedCriteria.setProjection(projectionList); 
    
        //Add more 
        ............................. 
    

    ऊपर कोड आप इस तरह के एक मापदंड क्वेरी के निर्माण के लिए सत्र वस्तु होने की कोई आवश्यकता मिल रहा है में? बिलकुल नहीं।

  2. कई बार के लिए समान मानदंड क्वेरी बनाना:
    सत्र ऑब्जेक्ट के बावजूद इसे एक बार बनाएं, और जब भी आप चाहें इस्तेमाल किया जा सके।

अंत में जब सत्र वस्तु उपलब्ध है, ऊपर क्वेरी सत्र के साथ इस प्रकार का उपयोग करें:

detachedCriteria.getExecutableCriteria(session).list(); 
संबंधित मुद्दे