निम्नलिखित डोमेन मॉडल को देखते हुए, मैं 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
। मुझे यह नापसंद था कि इसके लिए एक अतिरिक्त लूप की आवश्यकता होगी और मुझे डेटा सेट के बीच मैपिंग को प्रबंधित करने की आवश्यकता होगी। मुझे इसके लिए हाइबरनेट कैश का फायदा उठाने का आपका विचार पसंद है। क्या आप इस बारे में विस्तार से बता सकते हैं कि परिणामों को शामिल करने के लिए कैश पर निर्भर रहना कितना सुरक्षित (स्थिरता के संदर्भ में) है? क्या यह काम तब होता है जब लेनदेन में प्रश्न किए जाते हैं? मैं मुश्किल से हाजिर और छिटपुट आलसी आरंभीकरण त्रुटियों से डरता हूं।