हम एक बहुत ही मॉड्यूलर फैशन में स्प्रिंग, हाइबरनेट और मेवेन के साथ एक वेब अनुप्रयोग विकसित कर रहे हैं। डेटा एक्सेस को परिभाषित करने और विशिष्ट सामग्री को देखने वाली मूल परियोजनाएं हैं, फिर तर्क और संस्थाओं (@Entity
) को परिभाषित मॉड्यूल हैं और फिर वेब ऐप परिभाषित नियंत्रक और दृश्य है।जेपीए - एकाधिक जार @Entity ऑब्जेक्ट्स को परिभाषित करते हैं
अब हमारे पास खाता और भूमिका जैसे सुरक्षा इकाइयों को परिभाषित करने वाला एक सुरक्षा मॉड्यूल है और हमारे पास प्रोटोटाइप मॉड्यूल है जो ग्राहक और ऑर्डर जैसे कुछ उदाहरण इकाइयों को परिभाषित करता है। दोनों को PersistenceUnit
persistence.xml
के अंदर परिभाषित किया गया है जो PersistenceUnit नाम को छोड़कर बहुत खाली है, क्योंकि सभी डेटाबेस कॉन्फ़िगरेशन वेब ऐप में datasource.xml के साथ किया जाता है। वेब ऐप को दोनों जार को मैवेन निर्भरता के रूप में लोड करना होता है।
दोनों परियोजनाएं ठीक से निर्माण करेंगी, सभी इकाइयों को स्वत: संचरित करेंगी और उन्हें अपने संबंधित यूनिट परीक्षणों के लिए तैयार करेंगी। व्यक्तिगत रूप से जोड़े जाने पर वे वेब ऐप के भीतर सफलतापूर्वक लोड हो जाएंगे।
हालांकि, जैसे ही दोनों एक ही समय में लोड हो जाते हैं, दूसरा व्यक्ति पहले से ही PersistenceUnit
को ओवरराइड करेगा और इस प्रकार पहले सभी इकाइयों के लिए IllegalArgumentException : Not an entity
बना देगा। यदि दोनों परियोजनाओं में एक अलग दृढ़ता इकाई है, तो वेब ऐप लोड करने से एक और अपवाद फेंक देगा कि no single default persistence unit
परिभाषित किया गया है।
तो .. मैं उन सब को persistence.xml
(जैसे here) बल्कि घटक के माध्यम से स्कैन के अंदर परिभाषित करने के लिए बिना सभी @Entity
एनोटेट कक्षाएं अपने वेब अनुप्रयोग में लोड करने के लिए कैसे मिल सकता है? This, एक विचार की तरह लगता है हालांकि मैं कैसे उपयोग करने के लिए जानते हैं और यह परीक्षण नहीं है ...
मुझे लगता है कि हम या तो वेब अनुप्रयोग के अंदर सभी PersistenceUnits विलय या प्रोग्राम के रूप में सभी संस्थाओं को लोड करने के लिए है। Persistence.xml के अंदर उन्हें हार्ड-कोडित परिभाषित करना हमारे लिए एक विकल्प नहीं है।
पहले उत्तर के विषय में: जहाँ तक मुझे पता के रूप में , वसंत पहले से ही एनोटेड कक्षाओं के लिए स्कैन करता है और उन्हें 'PersistenceUnit' में जोड़ता है। समस्या यह है कि मुझे सभी 'PersistenceUnits' का नाम देना होगा जिसके परिणामस्वरूप उन्हें एक-दूसरे को ओवरराइड कर दिया जाएगा। तो मैं अपने वेब ऐप में सभी persistenceUnits को मर्ज करने का एक तरीका ढूंढ रहा हूं। पता नहीं है कि [यह] [1] (नीचे) क्या करेगा, हालांकि मुझे नहीं पता कि 'मर्जिंग पर्सिस्टेंस यूनिटपोस्टप्रोसेसर' [1]: http://forum.springsource.org/showthread.php पंजीकृत करने के लिए कहां है? 61763-जेपीए-और-बहु-दृढ़ता-इकाइयों – Pete