Подключение к нескольким базам данных в Hibernate - PullRequest
2 голосов
/ 10 октября 2011

Как я могу динамически подключаться к нескольким базам данных mysql с помощью Hibernate?

Ответы [ 3 ]

5 голосов
/ 10 октября 2011

Я думаю, что в Spring вы можете иметь несколько SessionFactories, каждый из которых использует отдельный источник данных.Вы можете передать конкретный SessionFactory соответствующему DAO.

3 голосов
/ 10 октября 2011

Если вы используете hibernate без пружины, вы можете иметь несколько свойств hibernate xml для каждой базы данных.В этих XML-файлах вы можете указать хост базы данных, имя пользователя, пароль, имя базы данных и другие свойства соединения.Вы можете создать несколько фабрик сессий, используя файлы XML и использовать правильную фабрику сессий в классах DAO.

1 голос
/ 10 октября 2011

Создание класса, который содержит сущности 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>

Не уверен, как это сделать с аннотацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...