2013-03-18 7 views
8

क्या स्प्रिंग डेटा विशिष्टता को परिभाषित करने का कोई तरीका है (एक जेपीए भविष्यवाणी लौटा रहा है) जिसका एकमात्र उद्देश्य उत्सुकता लाने के लिए है?वसंत डेटा जेपीए लाने

मेरे पास एक ऐसी इकाई है जो आलसी लोडिंग का उपयोग करके विभिन्न रिश्तों को परिभाषित करती है, लेकिन कई प्रश्न हैं जहां मैं सभी संबंधित संग्रह समेत संपूर्ण इकाई प्रतिनिधित्व वापस करना चाहता हूं, लेकिन इन प्रश्नों के मानदंड अलग-अलग हो सकते हैं। मैंने कुछ पदों को देखा है (उदा। spring forum पर) जो fetch समूहों की संभावित परिचय पर चर्चा करते हैं, जो संभवतः आदर्श समाधान होगा; हालांकि, चूंकि यह अभी तक जेपीए स्पेक का हिस्सा नहीं है, इसलिए स्प्रिंग डेटा इसके लिए समर्थन प्रदान नहीं करता है।

मैं विभिन्न गतिशील प्रश्नों पर उत्सुकता लाने के लिए एक पुन: प्रयोज्य तरीका ढूंढ रहा हूं।

उदाहरण के लिए, मैं एक पुन: प्रयोज्य विशिष्टता जिनका एकमात्र उद्देश्य के लिए उत्सुक लोड हो रहा है प्रदर्शन करने के लिए है विकसित करने पर विचार किया है, और जो अन्य विनिर्देशों के साथ जोड़ा जा सकता है, जैसे:

private static Specification<MyEntity> eager() { 

    return new Specification<MyEntity>() { 

     @Override 
     public Predicate toPredicate(Root<MyEntity> root, CriteriaQuery<?> query, CriteriaBuilder cb) { 
      for (PluralAttribute<? super MyEntity, ?, ?> fetch : root.getModel().getPluralAttributes()) { 
       root.fetch(fetch, JoinType.LEFT); 
      } 
      query.distinct(true); 
      return null; 
     } 

    }; 
} 

इस विनिर्देश के लक्ष्य के लिए है जैसे विभिन्न प्रश्नों में यह पुन: उपयोग,:

repository.findAll(where(eager()).and(otherCriteria).or(otherCriteria)); 

हालांकि, उत्सुक प्राप्त करने में कठिनाई विनिर्देश एक सच्चे विधेय नहीं है, तो यह रिटर्न null, और स्पष्ट समस्या का कारण बन (यानी NullPointerExceptions) जब चाइने अन्य भविष्यवाणियों के साथ डी।

(ध्यान दें कि यह अनुमान अकेले अपेक्षित काम करता है; यानी निम्न क्वेरी ठीक से प्राप्त करेगी: repository.findAll(eager());)।

क्या कोई उचित गैर-शून्य भविष्यवाणी है जिसे "उत्सुक" विनिर्देश से वापस किया जा सकता है, या क्या स्प्रिंग डेटा जेपीए विनिर्देशों का उपयोग करके उत्सुक fetches को ट्रिगर करने के लिए कोई अन्य पुन: प्रयोज्य दृष्टिकोण हैं (बिना किसी अन्य विनिर्देश पर उत्सुक भार को संभालने के)?

+0

मुझे आपके दृष्टिकोण का उपयोग करते समय निम्नलिखित अपवाद मिल रहा है: "क्वेरी निर्दिष्ट करने में शामिल हो गई है, लेकिन प्राप्त सूची का मालिक चुनिंदा सूची में मौजूद नहीं था"। – svlada

+0

वैकल्पिक रूप से, क्या ऐसा कोई दृष्टिकोण है जो सभी रिश्तों को आलसी बनाने के लिए काम करेगा? – chrismarx

उत्तर

6

हम DATAJPA-300 फिक्सिंग के पाठ्यक्रम में nullSpecification और Predicate रों की हैंडलिंग में सुधार हुआ है। आप 1.4 स्नैपशॉट्स को आज़मा सकते हैं और देख सकते हैं कि यह आपके परिदृश्य को कैसे प्रभावित करता है।

+0

स्नैपशॉट मेरे उपयोग के मामले के लिए पूरी तरह से काम करता है। धन्यवाद! – shelley

+0

@ ओलिवर गियरके आप भयानक भाई हैं –

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