* कई संग्रह हाइबरनेट और जेपीए में डिफ़ॉल्ट रूप से आलसी हैं। त्रुटि इसलिए है क्योंकि जैक्सन OneToMany को क्रमबद्ध करने का प्रयास कर रहा है जब इकाई प्रबंधक (हाइबरनेट-स्पीक में उर्फ सत्र) बंद हो जाता है। इसलिए, आलसी संग्रहों को पुनः प्राप्त नहीं किया जा सकता है।
डिफ़ॉल्ट रूप से जेपीए के साथ स्प्रिंग बूट एक OpenEntityManagerInViewFilter
provides प्रदान करता है प्राथमिक ईएम के लिए यह केवल-पढ़ने के लिए डीबी एक्सेस की अनुमति देता है, लेकिन, डिफ़ॉल्ट रूप से केवल प्राथमिक ईएम के लिए काम करता है।
आपके पास 3 विकल्प हैं:
1) आप एक जॉइन फ़ेच जोड़ सकते हैं, उदा। FetchMode कैसे काम करता है स्प्रिंग डेटा जेपीए में
2) आप गैर प्राथमिक निकाय प्रबंधक के लिए एक OpenEntityManagerInViewFilter जोड़ सकते हैं और इसे अपने संदर्भ में जोड़ सकते हैं।
कृपया ध्यान दें कि यह एक चुनौती है, प्रत्येक बार और फू इंस्टेंस के लिए, आपका ऐप OneToMany को पुनः प्राप्त करने के लिए डेटाबेस में वापस जाएगा। यह वह हिस्सा है जो बार के लिए काम नहीं कर रहा है, लेकिन फू के लिए है। इसका तात्पर्य एक स्केलेबिलिटी समस्या (कुछ लोगों द्वारा एन + 1 समस्या कहा जाता है) के रूप में प्रत्येक फू और बार के लिए, आप एक अतिरिक्त क्वेरी चलाते हैं, जो फूस और बार्स की गैर-तुच्छ मात्रा के लिए धीमी हो जाएगी।
3) एक विकल्प बार और फू पर अपने संग्रह को उत्सुक बनाना है (इसे देखें https://docs.oracle.com/javaee/7/api/javax/persistence/OneToMany.html#fetch-- ) लेकिन इसका सावधानीपूर्वक विश्लेषण करने की आवश्यकता है यदि मापनीयता आपके लिए बिल्कुल भी चिंता का विषय है।
मैं विकल्प #1 का सुझाव दूंगा।