2013-08-02 6 views
6

मैं एक xml से जावा कॉन्फ़िगरेशन से spring3.2.x + hibernate4.x सेटअप को स्थानांतरित करने की कोशिश कर रहा हूं।
यहाँ मौजूदा कोड का एक टुकड़ा:हाइबरनेट सत्र फ़ैक्टरी बनाम वसंत स्थानीय सत्र फ़ैक्टरीबीन

import org.hibernate.SessionFactory; 
import org.hibernate.Query; 
import org.hibernate.Session; 

public class StockDaoImpl implements StockDao{ 

    private SessionFactory sessionFactory; 
    public SessionFactory getSessionFactory() { 
     return sessionFactory;} 
    public void setSessionFactory(SessionFactory sessionFactory) { 
     this.sessionFactory = sessionFactory; 
    } 

    public void save(Stock stock){ 
     Session session = getSessionFactory().openSession(); 
     try{ 
     session.save(stock); 
     } 
     finally{ 
     session.close(); 
     } 
    } 

वसंत कॉन्फ़िग फ़ाइल

<!-- Stock Data Access Object --> 
    <bean id="stockDao" class="com.data.dao.StockDaoImpl" > 
     <property name="sessionFactory" ref="sessionFactory"></property> 
    </bean> 

    <bean id="dataSource"> 
..... 
</bean> 

    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 

     <property name="dataSource"> 
      <ref bean="dataSource"/> 
     </property> 
     <property name="hibernateProperties"> 
      ...... 
     </property> 
     <property name="mappingResources"> 
     ....... 
     </property> 
    </bean> 

यह ठीक काम करता है - लेकिन मैं कैसे इस config जावा में फिर से परिभाषित करते हैं?
यहाँ एक प्रयास -

@Bean 
    public StockDao stockDao() { 
     StockDaoImpl dao=new StockDaoImpl(); 
     dao.setSessionFactory(sessionFactory()); 
     return dao; 
    } 

...... 
    @Bean 
    public LocalSessionFactoryBean sessionFactory() { 
     LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); 
     sessionFactory.setDataSource(restDataSource()); 
     sessionFactory.setPackagesToScan(new String[] { .....}); 
     sessionFactory.setHibernateProperties(hibernateProperties()); 

     return sessionFactory; 
    } 

लेकिन यह अभ्यस्त sessionFacotry के रूप में संकलित है वसंत के LocalSessionFactoryBean नहीं करने के लिए भेजा जा रहा है?
मैं इसे कैसे सुलझा सकता हूं?

+0

के साथ एनोटेट किया गया है यह संकलित नहीं होगा: सटीक और पूर्ण संकलन त्रुटि क्या है? आप अपने डीएओ को स्पष्ट रूप से परिभाषित करने के बजाय ऑटोवॉयरिंग और क्लासपाथ स्कैनिंग का उपयोग क्यों नहीं करते? –

+0

कॉम \ डेटा \ config \ PersistenceConfig.java: 32: setSessionFactory com.data.dao.StockDaoImpl में (org.hibernate.Sessi onFactory) को लागू नहीं किया जा सकता है (org.springframewor k.orm.hibernate4.LocalSessionFactoryBean) दाव .setSessionFactory (sessionFactory()); – IUnknown

उत्तर

9

LocalSessionFactoryBean एक FactoryBean<SessionFactory> है। इसका मतलब है कि यह सत्र कारखाने के उदाहरण बनाने की अनुमति देता है।

तो आप बस

public StockDao stockDao() { 
    StockDaoImpl dao=new StockDaoImpl(); 
    dao.setSessionFactory(sessionFactory().getObject()); 
    return dao; 
} 

जरूरत है लेकिन मैं उस तरह DAOs explicitel नहीं बनाता। बस @ डीपोजिटरी के साथ अपने डीएओ को एनोटेट करें, और @Autowired का उपयोग करके सत्र फैक्ट्री को स्वचालित करें। सुनिश्चित करें कि जावा कॉन्फ़िगरेशन क्लास @ComponentScan("the.base.package.of.daos")

0

वापसी में getObject() कॉल गुम हो गया। (भी और परिवर्तन वापसी प्रकार!) return sessionFactory.getObject() साथ
Substituite

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