【问题标题】:Connect to multiple databases in Hibernate在 Hibernate 中连接到多个数据库
【发布时间】:2011-10-10 03:08:36
【问题描述】:

如何使用 Hibernate 动态连接多个 mysql 数据库?

【问题讨论】:

  • 您是指一个应用程序在运行时调用多个数据库还是根据环境改变数据库?

标签: java mysql hibernate


【解决方案1】:

我相信在 Spring 中,您可以拥有多个 SessionFactories,每个 SessionFactories 都使用单独的 DataSource。您可以将特定的 SessionFactory 传递给适当的 DAO。

【讨论】:

    【解决方案2】:

    如果你在没有 spring 的情况下使用 hibernate,你可以为每个数据库拥有多个 hibernate 属性 xml。在这些 xml 文件中,您可以指定数据库主机、用户名、密码、数据库名称和其他连接属性。您可以使用 xml 文件创建多个会话工厂,并在 DAO 类中使用正确的会话工厂。

    【讨论】:

      【解决方案3】:

      创建一个包含 HibernateProperties 和 SessionFactory 实体的类。 比如:

      public class HibernateSessionFactory {
              private static final long serialVersionUID = 1L;
      
              private static Log log = LogFactory.getLog(HibernateSessionFactory.class);
      
              private Resource[] mappingLocations;
      
              private Properties hibernateProperties;
      
              private SessionFactory factory;
      

      如果您以后可以使用 Spring 并使用数据库连接详细信息注入这个类,然后将这个 HibernateSessionFactory 分配给相关的 DAO 类,那就太好了。

      我以前做过,差不多是这样的:

      <bean id="mapHibernateFactory"
                      class="com.geofencing.dao.hibernate.HibernateSessionFactory"
                      init-method="init" destroy-method="dispose" scope="singleton">
                      <property name="mappingResources">
                              <list>
                                      ..... your hibernate mapping files .....
                              </list>
                      </property>
                      <property name="hibernateProperties">
                              <props>
                                      <prop key="hibernate.hbm2ddl.auto">false</prop>
                                      <prop key="hibernate.show_sql">false</prop>
                                      <prop key="hibernate.format_sql">false</prop>
                                      <prop key="hibernate.connection.isolation">4</prop>
                                      <prop key="hibernate.connection.autocommit">false</prop>
                                      <prop key="hibernate.connection.url">${jdbc.url}</prop>
                                      <prop key="hibernate.connection.username">${jdbc.username}</prop>
                                      <prop key="hibernate.connection.password">${jdbc.password}</prop>
                                      <prop key="hibernate.connection.driver_class">${jdbc.driverClassName}</prop>
                                      <prop key="hibernate.dialect">${jdbc.dialect}</prop>
                                      <prop key="hibernate.c3p0.min_size">5</prop>
                                      <prop key="hibernate.c3p0.max_size">20</prop>
                                      <prop key="hibernate.c3p0.timeout">1800</prop>
                                      <prop key="hibernate.c3p0.max_statements">50</prop>
                                      <prop key="hibernate.cache.provider_class"> org.hibernate.cache.EhCacheProvider</prop>
                                      <prop key="net.sf.ehcache.configurationResourceName">WEB-INF/ehcache.xml</prop>
                                      <prop key="hibernate.cglib.use_reflection_optimizer">false</prop>
                                      <prop key="hibernate.connection.zeroDateTimeBehavior">convertToNull</prop>
                                      <prop key="hibernate.connection.autoReconnect">true</prop>
                                      <prop key="hibernate.connection.autoReconnectForPools">true</prop>
                              </props>
                      </property>
              </bean>
      

      但不确定如何使用注释。

      【讨论】:

        猜你喜欢
        • 2010-12-27
        • 2017-07-12
        • 1970-01-01
        • 1970-01-01
        • 2019-01-13
        • 2020-11-04
        • 1970-01-01
        • 1970-01-01
        • 2012-09-12
        相关资源
        最近更新 更多