मेरे पास एक प्रोजेक्ट सेटअप है जहां मैंने एक प्रोजेक्ट मॉड्यूलर किया है, और एक मॉड्यूल को एक जार फ़ाइल में पैक किया है जो मुख्य परियोजना में शामिल होता है जब हम युद्ध बनाते हैं और इसे तैनात करते हैं। मुझे जिस समस्या का सामना करना पड़ रहा है वह यह है कि, मेरे पास मॉड्यूल में मौजूद एक इकाई है जो लोड नहीं होती है जब यूनिटनाम के लिए जेपीए कंटेनर एंटीटी मैनेजर फैक्टरी स्टार्टअप के दौरान बनाया जाता है।बाहरी जार फ़ाइल से जेपीए इकाई लोड हो रहा है
मेरे पास मूल प्रश्न है जो persistence.xml पर EntityManager लुकअप नहीं है और फिर निर्दिष्ट गुणों को लोड करता है, और फिर @Entity एनोटेशन के लिए सभी संकुल स्कैन करता है?
यह कैसे काम करता है इस पर कोई अंतर्दृष्टि और मैं इसे कैसे हल कर सकता हूं यह बहुत अच्छा होगा।
मुझे यह लिंक मिला और यह अलग दृढ़ता बनाने के बारे में उल्लेख करता है, लेकिन यहां मुझे एक अलग दृढ़ता इकाई की आवश्यकता नहीं है। मुझे बस मूल परियोजना पर वापस पिग करने के लिए मॉड्यूल की आवश्यकता है और इकाई और किसी भी अन्य @ संसाधन, @ कॉम्पोनेंट कक्षाएं लोड करें, जो संदर्भ के कारण होती है: घटक स्कैन और एनोटेशन कॉन्फ़िगरेशन।
http://javathoughts.capesugarbird.com/2009/02/jpa-and-multiple-persistence-units.html
यहाँ मेरी कोड/विन्यास EnitityManagerFactory की
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="LineManagement" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="false" />
<property name="showSql" value="false" />
<property name="databasePlatform" ref="cpsHibernateDialectClassName" />
</bean>
</property>
<property name="beanName" value="entityManager"></property>
</bean>
परिभाषा इकाई प्रबंधक प्रारंभ करेंगे तो है।
<persistence-unit name="LineManagement" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.id.new_generator_mappings" value="true" />
<property name="hibernate.current_session_context_class" value="thread" />
<property name="hibernate.default_batch_fetch_size" value="200" />
....
Persistence.xml जो दूसरे स्तर कैश और अन्य हाइबरनेट गुणों को परिभाषित करता।
फिर, मॉड्यूल जिसमें एक इकाई है।
import javax.persistence.Entity;
@Entity
@Table(name = IntegrationEvent.TABLE_NAME, uniqueConstraints = @UniqueConstraint(columnNames = "INTGRTN_EVNT_QUEUE_SK"))
@GenericGenerator(name = "UUID_GEN", strategy = "org.hibernate.id.UUIDHexGenerator", parameters = { @Parameter(name = "separator", value = "-") })
public class IntegrationEvent implements Serializable {
.... }
नोट: इकाई, माता पिता से एक अलग पैकेज में है, क्योंकि यह अपने आप ही एक अलग मॉड्यूल है।
वह इकाई जो मुख्य परियोजना में जुर्माना लोड करती है।
package com.parent.line.entity;
import javax.persistence.Entity;
@Entity
@Table(name = "ACCOUNT")
@Cacheable(true)
public class Account
implements LMLookupTypeEntityByDivision, Serializable, Comparable<Account> {
समस्या यह थी क्योंकि मेरे मॉड्यूल को मेरे मूल प्रोजेक्ट पर निर्भरता के रूप में जोड़ा गया था क्योंकि यह पूरी तरह अलग है। इसलिए इसे मेरे वेब-आईएनएफ/lib फ़ोल्डर में रखा जाएगा। जेपीए कोड को डीबग करने के बाद, जहां यह इकाइयों को लोड करता है, मुझे एहसास हुआ कि क्लासपाथ जहां @ एन्टीटी एनोटेशन के लिए स्कैनिंग शुरू होती है वह वेब-आईएनएफ/कक्षाओं से थी। जो समझ में आता है, क्योंकि lib केवल पढ़ा जाता है। अब, मुझे कक्षा फ़ोल्डर में मॉड्यूल जोड़ने या persistence.xml में टैग का उपयोग करने के बारे में सोचना है ताकि जार इकाई को स्कैन और लोड किया जा सके। –
Hrishikesh