java - How do I write this JPQL query? -


मैं 5 टेबल है कहो,

  tblBlogs tblBlogPosts tblBlogPostComment tblUser tblBlogMember BlogId BlogPostsId BlogPostCommentId UserId BlogMemberId BlogTitle BlogId CommentText FirstName UserId PostTitle BlogPostsId BlogId BlogMemberId  

अब मैं उन ब्लॉग्स और पोस्ट को पुनः प्राप्त करना चाहता हूं जिसके लिए ब्लॉगमेस्टर ने वास्तव में टिप्पणी की है तो संक्षेप में, मैं कैसे इस सादे पुराने एसक्यूएल लिख सकता हूँ?

  tblBlogs से चयन b.BlogTitle, bp.PostTitle, bpc.CommentText ख अंदरूनी शामिल हों पर tblBlogPosts बीपी b.BlogId = bp.BlogId अंदरूनी tblBlogPostComment बीपीसी शामिल हों bp.BlogPostsId = bpc.BlogPostsId अंदरूनी पर शामिल हों tblBlogMember बी.एम. पर bpc.BlogMemberId = bm.BlogMemberId कहां bm.UserId = 1;  

जैसा कि आप देख सकते हैं, सब कुछ आंतरिक भी शामिल है, इसलिए केवल उस पंक्ति को प्राप्त किया जाएगा जिसके लिए उपयोगकर्ता ने कुछ ब्लॉग के कुछ पोस्ट पर टिप्पणी की है। तो, मान लीजिए कि वह 3 ब्लॉगों में शामिल हो गए हैं जिनकी आईडी 1,2,3 (ब्लॉग जो उपयोगकर्ता में शामिल हुए हैं, वे ब्लैकमेलमेल में हैं) पर उपयोगकर्ता ने केवल ब्लॉग 2 में लिखा है (ब्लॉगपोस्टआईडी = 1)। इसलिए वह पंक्ति पुनः प्राप्त की जाएगी और 1,3 नहीं होगी क्योंकि यह भीतरी सम्मिलित है। मैं इस प्रकार की क्वेरी कैसे लिखूं?

JPQL में, हम केवल साधारण प्रश्नों को लिख सकते हैं जैसे:

  bbl.blogId को tblBlogMember से चुनें जहां bm.UserId = objUser;  

जहां objUser का उपयोग किया जाता है:

  em.find (User.class, 1);  

इस प्रकार एक बार जब हम सभी ब्लॉग मिलते हैं (यहाँ ब्लॉगइडी एक ब्लॉग ऑब्जेक्ट का प्रतिनिधित्व करता है) जिस उपयोगकर्ता में शामिल हो गया है, हम लूप के माध्यम से और सभी फैंसी चीजों को कर सकते हैं। लेकिन मैं इस पाशन वाले व्यवसाय में गिरना नहीं चाहता हूं और यह सब मेरे जावा कोड में लिखता हूं। इसके बजाय, मैं इसे डेटाबेस इंजिन के लिए छोड़ना चाहता हूं। तो, मैं उपरोक्त सादे SQL को JPQL में कैसे लिखूं? और JPQL क्वेरी का किस प्रकार का ऑब्जेक्ट वापसी होगा? क्योंकि मैं केवल सभी तालिका से कुछ फ़ील्ड का चयन कर रहा हूं।

मुझे लगता है कि मैंने अपनी आवश्यकता को सही ढंग से पोस्ट किया है, अगर मुझे स्पष्ट नहीं किया गया तो कृपया मुझे बताना।

अद्यतनः पास्कल के अनुसार उत्तर, मैंने उपरोक्त SQL क्वेरी के लिए जेपीएलएल क्वेरी लिखने की कोशिश की। मुझे एक छोटी सी समस्या का सामना करना पड़ रहा है इस क्वेरी काम कर रहा है, लेकिन अधूरा है:

  BlogMembers से bm.blogId का चयन करें BM अंदरूनी bm.blogId शामिल हों अंदरूनी ख में शामिल हों b.blogPostsList बीपी अंदरूनी शामिल हों bp.blogPostCommentList बीपीसी कहां बी.एम. .userId =: userId  

मैं इसे इसे संशोधित करना चाहता हूं:

  SELECT bm.blogId से ब्लॉगमैम्बर्स बीएम INNER JOIN बीएम .blogId अंदरूनी ख में शामिल हों b.blogPostsList बीपी अंदरूनी शामिल हों bp.blogPostCommentList बीपीसी कहां bpc.blogMembersId = bm.blogMembersId और bm.userId =: userId  

इसके बाद के संस्करण क्वेरी काम नहीं कर रहा। मैं कैसे इस समस्या का समाधान कर सकता हूं?

JPQL में, हम केवल साधारण प्रश्न (। ..)

यह सच नहीं है और JPQL का समर्थन करता है [LEFT [OUTER] | INNER] शामिल हों इनर जुड़ने के लिए, विनिर्देश के अनुभाग 4.4.5.1 इनर जॉइन (रिलेशनशिप जॉइन) देखें:

4.4.5.1 इनर जॉइन (रिलेशनशिप जॉइन)

भीतरी वाक्य विन्यास में शामिल होने के आपरेशन

  [आंतरिक] शामिल हों join_association_path_expression [के रूप में] identification_variable  

उदाहरण के लिए, क्वेरी के नीचे से अधिक मिलती है ग्राहकों और ऑर्डर के बीच संबंध इस प्रकार का जुड़ना आम तौर पर डेटाबेस में एक विदेशी कुंजी रिश्ते पर शामिल होने के समान है।

  ग्राहक सी से जुड़ें c c। Arrays_reset = 1  

कीवर्ड INNER वैकल्पिक रूप से उपयोग किया जा सकता है:

< पूर्व> ग्राहक सी इनर जॉइन सी। ओआरएस सी .स्टेट = 1

से चुनिए आपको संस्थाओं के बीच सहयोग को समझना होगा।


Comments