2013-12-21 139 views
1

我剛剛創建了兩個小型crud應用程序,一個是Web應用程序,另一個是從主方法運行的另一個應用程序。在休眠狀態下獲取sessionFactory

我很困惑如何在兩個應用程序中獲得sessionFactory對象。

在DAOImpl我的web應用程序,我只是注入SessionFactory對象,做

@Repository 
public class ContactDaoImpl implements ContactDao { 

    @Autowired 
    private SessionFactory sessionFactory; 

    public void addContact(Contact contact) { 

     //save: Persist the given transient instance 
     sessionFactory.getCurrentSession().save(contact); 
    } 

我的Spring應用上下文

<!-- <context:property-placeholder> XML element automatically registers a new PropertyPlaceholderConfigurer 
    bean in the Spring Context. --> 
    <context:property-placeholder location="classpath:database.properties" /> 
    <context:component-scan base-package="com.contactmanager"/> 

    <!-- enable the configuration of transactional behavior based on annotations --> 
    <tx:annotation-driven transaction-manager="hibernateTransactionManager"/> 

    <!-- View Resolver Configured --> 
    <bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="viewClass" 
      value="org.springframework.web.servlet.view.JstlView" /> 
     <property name="prefix"> 
      <value>/WEB-INF/views/</value> 
     </property> 
     <property name="suffix"> 
      <value>.jsp</value> 
     </property> 
    </bean> 

<!-- Creating DataSource --> 
<bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="${database.driver}" /> 
     <property name="url" value="${database.url}" /> 
     <property name="username" value="${database.user}" /> 
     <property name="password" value="${database.password}" /> 
    </bean> 




<!-- To persist the object to database, the instance of SessionFactory interface is created. 
SessionFactory is a singleton instance which implements Factory design pattern. 
SessionFactory loads hibernate.cfg.xml and with the help of TransactionFactory and ConnectionProvider 
implements all the configuration settings on a database. --> 

<!-- Configuring SessionFactory --> 
    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="annotatedClasses"> 
      <list> 
       <value>com.contactmanager.model.Contact</value> 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
       <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
       <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>    
      </props> 
     </property> 
    </bean> 

<!-- Configuring Hibernate Transaction Manager --> 
    <bean id="hibernateTransactionManager" 
     class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory" /> 
    </bean> 

但在其他應用中,我不使用Spring我只使用休眠。我必須從annotationConfiguration獲取sessionFactory,然後打開會話並開始事務。

AnnotationConfiguration().configure().buildSessionFactory(); 

    Session session = HibernateUtil.getSessionFactory().openSession(); 

    session.beginTransaction(); 

    Stock stock = new Stock(); 

    stock.setStockCode("4715"); 
    stock.setStockName("GENM"); 

    session.save(stock); 
    session.getTransaction().commit(); 

誰能告訴我爲什麼我必須寫更多的代碼行來堅持一個對象在這裏。 Spring配置是否在第一個應用程序中執行所有操作?

+0

是的,Spring正在爲您在webapp中爲您服務。 –

回答

1

Spring配置,這部分配置了一個SessionFactory的bean:

<!-- Configuring SessionFactory --> 
<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="annotatedClasses"> 
     <list> 
      <value>com.contactmanager.model.Contact</value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
      <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>    
     </props> 
    </property> 
</bean> 

你可以閱讀更多有關設置Hibernate會話工廠春天here

你的DAO這部分代碼負責要求Spring注入會話工廠:

@Autowired 
private SessionFactory sessionFactory; 

您可以在春季瞭解更多關於自動裝配的信息here

+0

感謝您的回覆 – underdog