2010-02-05 13 views
21

का उपयोग कर जॉइन मैं मानदंड API का उपयोग करके दो तालिकाओं के बीच एक बाएं बाहरी जॉइन करना चाहता हूं।(आलसी) बाएं बाहरी बाहरी हाइबरनेट मानदंड एपीआई

Criteria criteria = this.crudService 
      .initializeCriteria(Applicant.class) 
      .setFetchMode("products", FetchMode.JOIN) 
      .createAlias("products", "product"); 

बहरहाल, यह या तो एक आंतरिक में शामिल होने के प्रदर्शन करती है या एक सही बाहरी में शामिल होने, परिणाम यह रिटर्न की संख्या की वजह: सभी मैं हाइबरनेट दस्तावेज में मिल सकता है इस विधि है।

मैं भी चाहता हूं कि मैं आलसी हो जाऊं। मैं यह कैसे कर सकता हूँ?

चीयर्स!

अद्यतन: ऐसा लगता है कि उपनामों का उपयोग करके स्वचालित रूप से INNER जॉइन में शामिल हो जाता है। "पृष्ठभूमि कहानी" में कुछ ऐसा है जो मैंने अभी तक नहीं लिया है। तो, आज कोई उपनाम नहीं। यह मुझे दो तालिकाओं पर प्रतिबंध लगाने की समस्या के साथ छोड़ देता है, क्योंकि दोनों के पास एक कॉलम (या संपत्ति, यदि यह अधिक उपयुक्त है) 'नाम'।

+2

जवाब पहले से ही स्वीकार है। –

+0

मैं आपको जानना चाहता हूं कि "createAlia() में हाइबरनेट में डिफ़ॉल्ट रूप से एक इंटर्न जॉइन बनाता है"। मैंने एपीआई खोज ली है और इसे नहीं देख सकता। धन्यवाद। – FaithReaper

उत्तर

0

एक एसक्यूएल अनुरोध में शामिल है। यह आलसी नहीं हो सकता है।


हाइबरनेट साथ

, lazily इस डेटा पुनः प्राप्त करने के लिए, बस HQL अनुरोध से बाहर। फिर, जब आप अपनी इकाई पर गेटर्स तक पहुंचते हैं (यदि आपका सत्र अभी भी खुला है), तो यह स्वचालित रूप से लोड हो जाएगा (आपको अनुरोध के उस हिस्से को लिखना नहीं है)।

+0

क्षमा करें, मुझे यह नहीं मिला। शायद मुझे दोबारा बदलना चाहिए: मैं एक बाएं बाहरी जॉइन चाहता हूं, लेकिन मैं चाहता हूं कि डेटा केवल तभी प्राप्त किया जाए जब आवश्यक हो (उपयुक्त गेटर कहा जाता है)। क्या आलस्य (या उत्सुकता) किसी भी तरह से एसक्यूएल जॉइन के प्रकार से जुड़ा हुआ है? –

+0

वस्तुओं के साथ आलस्य महसूस किया जा सकता है, लेकिन SQL अनुरोध के साथ नहीं। एक बार पूरी तरह से एक अनुरोध निष्पादित किया जाता है, यह डिज़ाइन नहीं किया गया है ताकि आवश्यकता के बाद अनुरोध का हिस्सा निष्पादित किया जा सके! – KLE

+0

एचक्यूएल में मैं बाएं बाहरी जॉइन फ़ेच लिखता हूं। तो, संभवतः एक एचक्यूएल क्वेरी कई एसक्यूएल वाले से मेल खाती है, जिन्हें आवश्यक होने पर निष्पादित किया जाता है? वैसे भी, आलसी या नहीं, मैं एक बाएं बाहरी जॉइन कैसे कर सकता हूं? और मानदंड एपीआई का उपयोग करते हुए एचक्यूएल में नहीं। चीयर्स! –

34

आप उत्पादों की मेज पर शामिल होने के लिए छोड़ दिया करने के लिए की जरूरत है सिर्फ कार्य करें:

..... createAlias ​​("उत्पाद", "उत्पाद", Criteria.LEFT_JOIN);

+0

वास्तव में सरल और सहायक, बहुत बहुत धन्यवाद! – Sllouyssgort

+1

अब बहिष्कृत, अंकित के उत्तर – jlars62

20

एसडीवीड्स उत्तर का एपीआई अब deprecated है। इसकी अद्यतन संस्करण

.... createAlias ​​("कर्मचारी", "रोजगार", JoinType.LEFT_OUTER_JOIN)

+0

धन्यवाद का उपयोग करें। यह मुझे बहिष्कृत एपीआई के उपयोग को खत्म करने में मदद करता है –