2010-04-29 12 views
23

मैं अपने गैर-स्प्रिंग कोड में स्प्रिंग-डिफ़ाइंड हाइबरनेट कॉन्फ़िगरेशन और सत्र फ़ैक्टरी ऑब्जेक्ट्स प्राप्त करने का प्रयास कर रहा हूं। निम्नलिखित मेरी applicationContext.xml फाइल में परिभाषा है:मैं स्प्रिंग से हाइबरनेट कॉन्फ़िगरेशन ऑब्जेक्ट कैसे प्राप्त कर सकता हूं?

कोड:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="hibernateProperties"> 
    <props> 
     <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
     <prop key="hibernate.show_sql">true</prop> 
     <prop key="hibernate.hbm2ddl.auto">update</prop> 
     <prop key="hibernate.cglib.use_reflection_optimizer">true</prop> 
     <prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop> 
    </props> 
    </property> 
    <property name="dataSource"> 
    <ref bean="dataSource"/> 
    </property> 
    </bean> 

मैं अब getBean ("sessionFactory") कॉल करते हैं, तो मैं एक $ Proxy0 वस्तु जो के लिए एक प्रॉक्सी प्रतीत होता है लौटे हूँ हाइबरनेट सत्र फैक्ट्री ऑब्जेक्ट। लेकिन यह वही नहीं है जो मुझे चाहिए - मुझे स्थानीय सत्र फ़ैक्टरीबीन की आवश्यकता है क्योंकि मुझे कॉन्फ़िगरेशन के साथ-साथ सत्र फ़ैक्टरी तक पहुंच की आवश्यकता है।

कारण मुझे कॉन्फ़िगरेशन ऑब्जेक्ट की आवश्यकता है कि हमारा ढांचा हाइबरनेट के गतिशील मॉडल का उपयोग स्वचालित रूप से रनटाइम पर मैपिंग डालने में सक्षम है; इसके लिए आवश्यक है कि हम कॉन्फ़िगरेशन को बदल दें और सत्र फ़ैक्टरी का पुनर्निर्माण करें। असल में, हम जो करने की कोशिश कर रहे हैं वह हैबर्ननेट कॉन्फ़िगरेशन प्राप्त कर रहा है जो स्प्रिंग में पहले से मौजूद है ताकि हमारे ग्राहकों के पास पहले से ही स्प्रिंग में उस जानकारी को Hibernate.cfg.xml फ़ाइल में डुप्लिकेट करने की आवश्यकता न हो। हमारी हाइबरनेट सुविधाओं का उपयोग करें।

+0

और आप सत्र फैक्ट्री का पुनर्निर्माण कैसे करते हैं? और आप कैसे सुनिश्चित करते हैं कि सभी मौजूदा लेनदेन नष्ट होने से पहले समाप्त हो गए हैं? – banterCZ

उत्तर

38

एक स्प्रिंग कंटेनर के अस्पष्ट सुविधा the & prefix है:

आप एक वास्तविक FactoryBean उदाहरण ही है, सेम नहीं यह पैदा करता है के लिए एक कंटेनर पूछने की आवश्यकता है, तो आप के साथ सेम आईडी प्रस्तावना एम्परस प्रतीक & (उद्धरण के बिना) getBean ApplicationContext की विधि को कॉल करते हुए getBean कॉलिंग। तो एक दिया myBean का एक आईडी के साथ FactoryBean, कंटेनर पर getBean("myBean") लागू के लिए FactoryBean के उत्पाद, और getBean("&myBean") रिटर्न FactoryBean उदाहरण ही लागू देता है।

तो आपके मामले में, getBean("&sessionFactory") का उपयोग करके आपको LocalSessionFactoryBean इंस्टेंस स्वयं ही लौटा देना चाहिए। फिर Configuration ऑब्जेक्ट प्राप्त करने के लिए आप .getConfiguration() पर कॉल कर सकते हैं।

+1

@skaffman अच्छी नौकरी! –

+0

बिल्कुल सही, बिल्कुल मुझे क्या चाहिए - धन्यवाद! –

+3

हम इसे कैसे @Autowire कर सकते हैं? –

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

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