2010-08-10 22 views
8

मैं वर्तमान में अपने कुछ कोड मॉड्यूलर करने के लिए लाइब्रेरी बनाने पर काम कर रहा हूं और मैं हाइबरनेट के साथ एक समस्या में भाग रहा हूं।एकाधिक हाइबरनेट कॉन्फ़िगर

मेरे मुख्य एप्लिकेशन में मेरे पास चलाने के लिए आवश्यक जानकारी प्राप्त करने के लिए एक हाइबरनेट कॉन्फ़िगरेशन है, लेकिन फिर मुझे अपनी लाइब्रेरी में हाइबरनेट की आवश्यकता भी है क्योंकि कुछ ऑब्जेक्ट्स जिन्हें मैं चाहता हूं, अन्य अनुप्रयोगों में उपयोग किया जा सकता है।

जब मैं अपने टॉमकैट सर्वर को शुरू करता हूं, दोनों हाइबरनेट सेटअप के साथ, मुझे त्रुटियां मिलती हैं कि बीन्स को हल नहीं किया जा सकता है और जो कहता है कि मेरे पोजिशनल पैरामीटर मेरी क्वेरी में गायब हैं। हालांकि, जब मैं केवल एप्लिकेशन के साथ टॉमकैट शुरू करता हूं तो हाइबरनेट कॉन्फ़िगरेशन ठीक से शुरू होता है।

यहाँ कॉन्फ़िगरेशन की तरह लग रही है ...

पुस्तकालय से:

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 


<session-factory> 
    <mapping resource="blah.hbm.xml"/> 
    <mapping resource="blargh.hbm.xml"/> 
    <mapping resource="stuff.hbm.xml"/> 
    <mapping resource="junk.hbm.xml"/> 
    <mapping resource="this.hbm.xml"/> 
</session-factory> 

</hibernate-configuration> 

और आवेदन से:

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 


<session-factory>  

    <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> 

    <!-- Enable the query cache --> 
    <property name="hibernate.cache.use_query_cache">true</property> 

    <!-- Echo all executed SQL to stdout --> 
    <property name="show_sql">false</property> 

    <!-- mapping files --> 

    <mapping resource="appStuff"/> 
    <mapping resource="appBlah"/> 
    <mapping resource="appBlargh"/> 
    <mapping resource="appJunk"/> 
    <mapping resource="appThis"/>  

</session-factory> 

</hibernate-configuration> 

मैं अभी भी बहुत हाइबरनेट करने के लिए नए हूँ और यह एक अजीब विन्यास की तरह है।

उत्तर

12

आप प्रोग्रामिक रूप से हाइबरनेट कॉन्फ़िगरेशन फ़ाइलों को लोड कर सकते हैं।

SessionFactory sf = new Configuration().configure("somename.cfg.xml").buildSessionFactory(); 

इससे आपको दो सत्र फ़ैक्टरी ऑब्जेक्ट्स बनाने की अनुमति मिल जाएगी। हालांकि, मुझे लगता है कि आप अपने ऐप और आपके मॉड्यूल के लिए उसी सत्र फ़ैक्टरी का उपयोग करना चाहते हैं।

आप लोड दोनों एक एकल डोम वस्तु में एक्सएमएल फाइल हाइबरनेट (अपने आवेदन की लोगों के साथ अपने मॉड्यूल के "सत्र-कारखाने" टैग बच्चों गठबंधन) और उसके बाद निम्न कोड इस्तेमाल कर सकते हैं:

import org.hibernate.cfg.Configuration; 
// ... 
SessionFactory sf = new Configuration().configure(yourDOMObject).buildSessionFactory(); 

संपादित करें: सत्र- कारखाने को मुद्रित नहीं किया गया था क्योंकि यह पात्रों की तुलना में अधिक से कम था।

+0

ऐसा लगता है कि मैं क्या देख रहा हूं, लेकिन मुझे यह पूछने दो। क्या बेहतर होगा कि मेरी लाइब्रेरी में अपना स्वयं का सत्र कारखाना है जो इसका उपयोग कर सकता है, या क्या मुझे पूरी चीज़ के लिए एक सत्र कारखाना होना चाहिए? मेरी स्थिति के लिए ऐसा लगता है कि कई सत्र कारखानों और अधिक उपयुक्त होंगे, लेकिन मुझे नहीं पता कि अगर मैं उस रास्ते पर जाता हूं तो मैं परेशानी में भाग लेगा। – Shaded

+0

ईमानदार होने के लिए, मेरे पास हाइबरनेट के साथ इतना अधिक अनुभव नहीं है। हालांकि, आप जो वर्णन करते हैं, उससे मुझे लगता है कि एकाधिक सत्र फैक्ट्री ऑब्जेक्ट्स आपके उपयोग के मामले के लिए उपयुक्त प्रतीत होते हैं क्योंकि यह आपके कोड को मॉड्यूलर करने में मदद करता है। लेकिन इसके लिए मेरा शब्द न लें क्योंकि मुझे यह भी पता नहीं है कि कुछ प्रदर्शन प्रभाव हो सकता है, उदाहरण के लिए या किसी अन्य समस्या के लिए। –

+0

सहायता के लिए धन्यवाद, मुझे पूरा यकीन है कि कई तरह से जाने का तरीका है। मैं इसके साथ दौड़ने वाला हूं और आशा करता हूं कि यह मुझे काटने के लिए वापस नहीं आएगा! फिर से धन्यवाद! – Shaded

2

यदि आप इसे करना चाहते हैं तो इसे हाइबरनेट शर्ड 1 का उपयोग करें।

SessionFactory sf = new Configuration() 
     .configure("Fromtheapp.cfg.xml") 
     .buildSessionFactory(); 
: othewise आप बस पथ (फाइल सिस्टम पर या classpath में) पारित कर सकते हैं hibernate.cfg.xml की आप पुस्तकालय

SessionFactory sf = new Configuration() 
    .configure("Fromthelibrary.cfg.xml") 
    .buildSessionFactory(); 

से और आवेदन से

उपयोग करना चाहते हैं

संबंधित मुद्दे