निम्नलिखित डोमेन मॉडल को देखते हुए, मैं Answerअपने Valueएस और उनके संबंधित उप-बच्चों सहित सभी को लोड करना चाहता हूं और इसे AnswerDTOतब JSON में परिवर्तित कर सकता हूं। मेरे पास एक कार्यशील समाधान है लेकिन यह एन + 1 समस्या से ग्रस्त है जिसे मैं एक तदर्थ का उपयोग करके छुटकारा चाहता हूं @EntityGraph। सभी एसोसिएशन कॉन्फ़िगर किए गए हैं LAZY।
@Query("SELECT a FROM Answer a")
@EntityGraph(attributePaths = {"value"})
public List<Answer> findAll();
विधि @EntityGraphपर एक ऐड-हॉक का उपयोग करके Repositoryमैं यह सुनिश्चित कर सकता हूं कि Answer->Valueएसोसिएशन पर एन + 1 को रोकने के लिए मूल्यों को पूर्व-निर्धारित किया गया है । जबकि मेरा परिणाम ठीक है, आलसी एस के selectedसहयोग को लोड करने के कारण एक और एन + 1 समस्या है MCValue।
इसका उपयोग करना
@EntityGraph(attributePaths = {"value.selected"})
विफल रहता है, क्योंकि selectedक्षेत्र निश्चित रूप से कुछ Valueसंस्थाओं का हिस्सा है :
Unable to locate Attribute with the the given name [selected] on this ManagedType [x.model.Value];
मैं कैसे कह सकता हूं कि selectedमूल्य के मामले में जेपीए केवल एसोसिएशन लाने की कोशिश करता है MCValue? मुझे कुछ चाहिए optionalAttributePaths।

selectedउन जवाबों के लिए एक दूसरा लाने के लिए जिनके पास ए हैMCValue। मुझे यह नापसंद था कि इसके लिए एक अतिरिक्त लूप की आवश्यकता होगी और मुझे डेटा सेट के बीच मैपिंग को प्रबंधित करने की आवश्यकता होगी। मुझे इसके लिए हाइबरनेट कैश का फायदा उठाने का आपका विचार पसंद है। क्या आप इस बारे में विस्तार से बता सकते हैं कि परिणामों को शामिल करने के लिए कैश पर निर्भर रहना कितना सुरक्षित (स्थिरता के संदर्भ में) है? क्या यह काम तब होता है जब लेनदेन में प्रश्न किए जाते हैं? मैं मुश्किल से हाजिर और छिटपुट आलसी आरंभीकरण त्रुटियों से डरता हूं।