के साथ कई स्तरों पर जेपीए आलसी fetch इकाइयों मैं डेटाबेस से मेरी इकाइयों का चयन करने के लिए जेपीए 2 का उपयोग अपने मानदंड API के साथ कर रहा हूँ। कार्यान्वयन वेबस्पेयर अनुप्रयोग सर्वर पर ओपनजेपीए है। मेरी सभी इकाइयां Fetchtype = Lazy के साथ बनाई गई हैं।मानदंड एपीआई
मैं डेटाबेस से कुछ मानदंडों के साथ एक इकाई का चयन करता हूं और सभी नेस्टेड डेटा को उप-टेबल से एक बार में लोड करना चाहता हूं। अगर मैं एक डेटामॉडल जहां तालिका तालिका बी को oneToMany में शामिल हो गए है, मैं अपने मापदंड क्वेरी में एक लायें-खंड का उपयोग कर सकते हैं:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<A> cq = cb.createQuery(A.class);
Root<A> root = cq.from(A.class);
Fetch<A,B> fetch = root.fetch(A_.elementsOfB, JoinType.LEFT);
यह ठीक काम करता है। मुझे एक तत्व ए मिलता है और बी के सभी तत्व सही ढंग से भरे जाते हैं। अब तालिका बी में टेबल सी के लिए एक-बहुत-रिश्ते है और मैं उन्हें भी लोड करना चाहता हूं। तो मैं अपने प्रश्न के निम्न कथन जोड़ें:
Fetch<B,C> fetch2 = fetch.fetch(B_.elementsOfC, JoinType.LEFT);
लेकिन यह अभ्यस्त कुछ भी कर।
क्या कोई जानता है कि एक क्वेरी में बहु स्तरीय इकाइयों को कैसे लाया जाए?
आपके उत्तर के लिए बहुत बहुत धन्यवाद। लेकिन दस्तावेज आलेख में जेपीक्यूएल का एक उदाहरण है जो आपने इंगित किया है: 'पत्रिका एक्स से एक्स का चयन करें x में शामिल हों x.articles में शामिल होने में शामिल हों। Publishers p जहां x.title =' JDJ'' टेबल x, a और पी संबंधों के साथ एक्स-> ए और ए-> पी। यह वही है जो मैं मानदंड एपीआई के साथ करना चाहता हूं। –
आपने इसे बहुत सावधानी से नहीं पढ़ा। यह क्वेरी के बारे में उदाहरण है जो वाक्यविन्यास त्रुटि का कारण बनता है। उस क्वेरी से पहले वाक्य है: "निम्न क्वेरी के परिणामस्वरूप वाक्यविन्यास त्रुटि होगी:"। आप क्या करना चाहते हैं काम नहीं करता है। –
ओह, आप सही हैं। तो मैं केवल इतना कह सकता हूं: ओउप्स। लेकिन वैसे भी ... क्या कोई अभ्यास है जिससे मैं ऐसी समस्या हल कर सकता हूं? मुझे लगता है कि इस दुनिया में बहुत से लोग हैं जो दो से अधिक टेबल लेना चाहते हैं। क्या मुझे पहले दूसरी तालिका में शामिल होना है या क्या मुझे मैन्युअल रूप से अन्य डेटा पढ़ना चाहिए? इसके लिए सबसे अच्छा अभ्यास क्या है? –