title: hibernate multiple database configuration files
body: <p>I have the database config show below file that reads from the application.properties which has information to connect to a single data base. </p>
  
  <p>I want to add another similar configuration file that will allow me to connect to another database and use its session factory like the primary one I already have. </p>
  
  <p>I am working on making another similar file which reads from another application properties file. However I am not sure how to wire it so that I can have multiple session factories in each of my entity classes</p>
  
  <pre><code>import java.util.Properties;
  
  import javax.sql.DataSource;
  
  import org.springframework.beans.factory.annotation.Value;
  import org.springframework.context.annotation.Bean;
  import org.springframework.context.annotation.Configuration;
  import org.springframework.jdbc.datasource.DriverManagerDataSource;
  import org.springframework.orm.hibernate4.HibernateTransactionManager;
  import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
  import org.springframework.transaction.annotation.EnableTransactionManagement;
  
  @Configuration
  @EnableTransactionManagement
  public class DatabaseConfig {
  
    @Value("${db.driver}")
    private String DB_DRIVER;
  
    @Value("${db.password}")
    private String DB_PASSWORD;
  
    @Value("${db.url}")
    private String DB_URL;
  
    @Value("${db.username}")
    private String DB_USERNAME;
  
    @Value("${hibernate.dialect}")
    private String HIBERNATE_DIALECT;
  
    @Value("${hibernate.show_sql}")
    private String HIBERNATE_SHOW_SQL;
  
    @Value("${hibernate.hbm2ddl.auto}")
    private String HIBERNATE_HBM2DDL_AUTO;
  
    @Value("${entitymanager.packagesToScan}")
    private String ENTITYMANAGER_PACKAGES_TO_SCAN;
  
    @Bean
    public DataSource dataSource() {
      DriverManagerDataSource dataSource = new DriverManagerDataSource();
      dataSource.setDriverClassName(DB_DRIVER);
      dataSource.setUrl(DB_URL);
      dataSource.setUsername(DB_USERNAME);
      dataSource.setPassword(DB_PASSWORD);
      return dataSource;
    }
  
    @Bean
    public LocalSessionFactoryBean sessionFactory() {
      LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
      sessionFactoryBean.setDataSource(dataSource());
      sessionFactoryBean.setPackagesToScan(ENTITYMANAGER_PACKAGES_TO_SCAN);
      Properties hibernateProperties = new Properties();
      hibernateProperties.put("hibernate.dialect", HIBERNATE_DIALECT);
      hibernateProperties.put("hibernate.show_sql", HIBERNATE_SHOW_SQL);
      hibernateProperties.put("hibernate.hbm2ddl.auto", HIBERNATE_HBM2DDL_AUTO);
      sessionFactoryBean.setHibernateProperties(hibernateProperties);
  
      return sessionFactoryBean;
    }
  
    @Bean
    public HibernateTransactionManager transactionManager() {
      HibernateTransactionManager transactionManager = 
          new HibernateTransactionManager();
      transactionManager.setSessionFactory(sessionFactory().getObject());
      return transactionManager;
    }
  
  } // class DatabaseConfig
  </code></pre>
  
  <p>Usage of session factory in a generic dao. I would like another session factory that can connect to another datasource.</p>
  
  <pre><code>@Repository("baseDao")
  @Transactional
  public class BaseDaoImpl&lt;T extends Serializable&gt; implements BaseDao&lt;T&gt; {
      @Autowired
      private SessionFactory sessionFactory;
  
      private Session getSession() {
          return sessionFactory.getCurrentSession();
      }
  
  ...
  </code></pre>