2012-01-09 16 views
7

के साथ कई स्तरों पर जेपीए आलसी 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); 

लेकिन यह अभ्यस्त कुछ भी कर।

क्या कोई जानता है कि एक क्वेरी में बहु स्तरीय इकाइयों को कैसे लाया जाए?

उत्तर

10

यह जेपीक्यूएल के साथ काम नहीं करता है और इसे CriteriaQueries में भी काम करने का कोई तरीका नहीं है। विशिष्टता सीमा लोगों में जो सीधे लौटे इकाई द्वारा दर्शाया जाता है करने के लिए संस्थाओं दिलवाया:

बारे में लाने CriteriaQuery साथ शामिल हो:

An association or attribute referenced by the fetch method must be referenced from an entity or embeddable that is returned as the result of the query.

बारे में लाने JPQL में शामिल होने:

The association referenced by the right side of the FETCH JOIN clause must be an association or ele ment collection that is referenced from an entity or embeddable that is returned as a result of the query.

एक ही सीमा है ओपनजेपीए दस्तावेज में भी बताया गया।

+0

आपके उत्तर के लिए बहुत बहुत धन्यवाद। लेकिन दस्तावेज आलेख में जेपीक्यूएल का एक उदाहरण है जो आपने इंगित किया है: 'पत्रिका एक्स से एक्स का चयन करें x में शामिल हों x.articles में शामिल होने में शामिल हों। Publishers p जहां x.title =' JDJ'' टेबल x, a और पी संबंधों के साथ एक्स-> ए और ए-> पी। यह वही है जो मैं मानदंड एपीआई के साथ करना चाहता हूं। –

+0

आपने इसे बहुत सावधानी से नहीं पढ़ा। यह क्वेरी के बारे में उदाहरण है जो वाक्यविन्यास त्रुटि का कारण बनता है। उस क्वेरी से पहले वाक्य है: "निम्न क्वेरी के परिणामस्वरूप वाक्यविन्यास त्रुटि होगी:"। आप क्या करना चाहते हैं काम नहीं करता है। –

+3

ओह, आप सही हैं। तो मैं केवल इतना कह सकता हूं: ओउप्स। लेकिन वैसे भी ... क्या कोई अभ्यास है जिससे मैं ऐसी समस्या हल कर सकता हूं? मुझे लगता है कि इस दुनिया में बहुत से लोग हैं जो दो से अधिक टेबल लेना चाहते हैं। क्या मुझे पहले दूसरी तालिका में शामिल होना है या क्या मुझे मैन्युअल रूप से अन्य डेटा पढ़ना चाहिए? इसके लिए सबसे अच्छा अभ्यास क्या है? –

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