2011-05-05 13 views
12

कम कोड के अलावा, हाइबरनेट मानदंड API का उपयोग करके एक इन क्लॉज बनाने के लिए निम्नलिखित दो दृष्टिकोणों के बीच क्या अंतर है? क्या प्रदर्शन चिंताएं हैं? क्या मुझे याद आ रही है कि पुनर्प्राप्ति में कुछ तर्क है? वे दोनों पंक्तियों के लौटने के समान ही प्रदर्शन करते हैं।हाइबरनेट Restrictions.in बनाम विजन

Disjunction disj = Restrictions.disjunction(); 
for (String value : stringArray) { 
    disj.add(Restrictions.eq("code", value)); 
} 
where.add(disj); 

वीएस।

Restrictions.in("code", stringArray); 

कारण मैं पूछ जहां पूर्व से मौजूद है, क्योंकि मैं विरासत कोड पुनर्रचना हूँ, लेकिन मैं उम्मीद कर रहा था उत्तरार्द्ध है। यदि वे दोनों एक जैसे हैं, तो मैं अकेले विरासत कोड छोड़ने जा रहा हूं।

उत्तर

11

हाइबरनेट Disjunction तुम पर पुनरावृति और में तो आदर्श रूप selective disjunction

आवेदन कर सकते हैं

 Group expressions together in a single disjunction 

जिसका मतलब है, आप वेल्यू एक्स या Y या Z सशर्त के खिलाफ तुलना करने के लिए है, लिए किया जाता है आपका केस Restrictions.in और Restrictions.Disjunction वही काम करता है, मैं इस मामले में पूर्व को पसंद करता हूं।

+0

लगता है कि दूसरे दृष्टिकोण की तरह लग रहा है, लूपिंग की आवश्यकता नहीं है। हालांकि, आपकी व्याख्या समझ में आता है। धन्यवाद। – sma

+1

@ एसएमए: जब मैं पूर्व कहता हूं, तो मैं अपनी पोस्ट में पहले (Restrictions.in) का जिक्र कर रहा था, न कि आपकी पोस्ट :) – Narayan

5

प्रतिबंध। संयोजन हमें स्पष्ट नियंत्रण देता है, उदाहरण के लिए यह ऑपरेटर की तरह अनुमति देता है, जहां ऑपरेटर में नहीं है।

उदाहरण के लिए:

criteria.add(Restrictions.disjunction() 
         .add(Restrictions.eq("bill.stateCd", null)) 
         .add(Restrictions.eq("bill.stateCd", "")) 
         .add(Restrictions.ilike("bill.stateCd","%"+stateCd+"%"))); 

दिया कोड उन दो बहुत अलग ढंग जब stringArray करता है शून्य तत्व ही व्यवहार के साथ में

criteria.add(Restrictions.in("bill.stateCd", Arrays.asList(null,"", "%"+stateCd+"%"))); 
+0

नकारात्मक वोट क्यों !? – Ram

2

साथ प्राप्त किया जा नहीं कर सकते।

शून्य अभिव्यक्तियों के साथ संयोजन का उपयोग 1=1 या समकक्ष के साथ वैध SQL क्वेरी उत्पन्न करता है।

Restrictions.in बिना ऑपरेटर के ऑपरेटर की ओर जाता है, जो अक्सर होता है (शायद कुछ एसक्यूएल बोली इसे संभाल सकता है) वाक्य रचनात्मक रूप से गलत है।

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