Как подключиться к нескольким базам данных в Hibernate
68749 просмотра
6 ответа
Я новая пчела в Hibernate и пробую вещи. Одна вещь, которая, кажется, развлекает всех, это как подключиться к различным базам данных? У меня есть два вопроса здесь:
- Если в одном и том же веб-приложении мне нужно подключиться к MySQL и Oracle, как мне это сделать?
- Я использую MySQL и имею две базы данных test1 и test2, как подключиться и получить данные?
Я прочитал в блоге, что мы можем создавать различные конфигурационные файлы и делать это. Я попробовал, но безуспешно. Вот что я попробовал:
SessionFactory sf = (SessionFactory) new Configuration().configure(path);
Где путь - это путь к файлу конфигурации. Это правильный путь?
Автор: akellakarthik Источник Размещён: 12.11.2019 09:51Ответы (6)
45 плюса
Используя сопоставления аннотаций в качестве примера:
Configuration cfg1 = new AnnotationConfiguration();
cfg1.configure("/hibernate-oracle.cfg.xml");
cfg1.addAnnotatedClass(SomeClass.class); // mapped classes
cfg1.addAnnotatedClass(SomeOtherClass.class);
SessionFactory sf1 = cfg1.buildSessionFactory();
Configuration cfg2 = new AnnotationConfiguration();
cfg2.configure("/hibernate-mysql.cfg.xml");
cfg2.addAnnotatedClass(SomeClass.class); // could be the same or different than above
cfg2.addAnnotatedClass(SomeOtherClass.class);
SessionFactory sf2 = cfg2.buildSessionFactory();
Затем используйте sf1 и sf2, чтобы получить сеансы для каждой базы данных. Для сопоставления файлов вы просто используете cfg.addClass вместо addAnnotatedClass. В этом случае поместите файлы cfg.xml в корневой пакет. У них будет Oracle или MySQL диалект и информация о соединении.
Автор: Brian Deterling Размещён: 17.12.2009 10:043 плюса
Это невозможно сделать с помощью одного файла конфигурации Hibernate. Вам нужно иметь два файла конфигурации для этого.
Настроить mysql
базу данных
hibernate-mysql.cfg.xml
Настроить oracle
базу данных
hibernate-oracle.cfg.xml
В деталях, mysql
файл конфигурации будет таким.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">PASSWORD</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/UR_DB_NAME</property>
<property name="hibernate.connection.username">USERNAME</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<mapping class="domain.EmployeeMysql"></mapping>
</session-factory>
</hibernate-configuration>
В деталях, oracle
файл конфигурации будет таким.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.bytecode.use_reflection_optimizer">false</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.password">PASSWORD</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:UR DB NAME</property>
<property name="hibernate.connection.username">USERNAME</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="show_sql">true</property>
<mapping class="domain.EmployeeOracleSql"></mapping>
</session-factory>
</hibernate-configuration>
И код должен быть таким.
Конфигурация MySQL
private static SessionFactory sessionAnnotationFactory;
sessionAnnotationFactory = new Configuration().configure("hibernate-mysql.cfg.xml").buildSessionFactory();
Session session = sessionAnnotationFactory.openSession();
конфигурация оракула sql
sessionAnnotationFactory = new Configuration().configure("hibernate-oracle.cfg.xml").buildSessionFactory();
Session session = sessionAnnotationFactory.openSession()
Автор: Dulith De Costa
Размещён: 14.08.2017 01:49
2 плюса
В идеале вам следует перейти к типу распределенной транзакции системы [с использованием Java Transaction Analyzer org.hibernate.transaction.JTATransactionFactory] в этом случае. Если вы работаете на сервере приложений JBoss, вы можете сделать это с помощью «Распределенных менеджеров транзакций». Вы можете узнать больше об этом здесь .
Автор: Shamik Размещён: 17.12.2009 01:551 плюс
Вы также можете использовать catalog
со значением другой базы данных
@Table(name = "foo", schema = "bar", catalog = "OtherDatabase")
0 плюса
Вы также можете добавить класс отображения в файле configuration.xml
Примечание: это для аннотаций и для ресурсов используйте ключевое слово resources вместо класса
<mapping class="packageName.classNmae1"/>
<mapping class="packageName.classNmae2"/>
Автор: karan
Размещён: 29.01.2018 10:33
-1 плюса
Вы можете соединить две базы данных test1 и test2, получить данные только с одним спящим режимом с некоторыми хитростями:
hibernate SQLQuery: просто добавьте имя базы данных с таблицей «select * from test1.table1», «select * from test2.table2»
персистентность гибернации: использование схемы ключей в xmlnate mapping xml
<class name="Table1Class" table="table1" schema="test1"> <class name="Table2Class" table="table2" schema="test2">
Вопросы из категории :
- hibernate Как вы «ИЛИ» критерии вместе при использовании запроса критериев с Hibernate?
- hibernate пакет вставки спящего режима с разделенным postgresql
- hibernate Как избежать предупреждений о безопасности типа с результатами Hibernate HQL?
- hibernate Каковы различия между различными методами сохранения в Hibernate?
- hibernate Hibernate: hbm2ddl.auto = обновление в производстве?
- hibernate Hibernate JPA Sequence (без идентификатора)
- hibernate Что такое алгоритм Hi / Lo?
- hibernate Легкая альтернатива Hibernate?
- hibernate проблемы с именем колонки в спящем режиме
- hibernate Grails, вставка большого количества данных с использованием результатов withTransaction в OutOfMemoryError
- database Двоичные данные в MySQL
- database Обменять уникальные индексированные значения столбцов в базе данных
- database Как работает индексация базы данных?
- database Как индексировать столбец базы данных
- database Насколько большой может быть база данных MySQL до того, как производительность начнет снижаться
- database Хранение изображений в БД - да или нет?
- database В какой момент кто-то решит переключить системы баз данных
- database Хранить файл в базе данных в отличие от файловой системы?
- database Как выбрать n-ую строку в таблице базы данных SQL?
- database MyISAM против InnoDB