Hibernate с использованием нескольких баз данных - PullRequest
4 голосов
/ 25 октября 2010

Мне нужно иметь несколько баз данных для разных клиентов.Как я могу обрабатывать несколько баз данных с Hibernate?Есть ли хорошие примеры, как это сделать?

Я мог бы создать объект конфигурации и затем построить SessionFactory, но это всегда создавало бы новую фабрику сессий, которая не была бы очень мудрой.

РЕДАКТИРОВАТЬ:

Теперь я могу получить объект конфигурации hibernate, когда пользователь входит в систему, но как я могу создать / получить фабрику сеансов с этим объектом, чтобы была только одна фабрика сеансов для одной базы данных (конечно, если несколько баз данныхиспользуется одновременно, то может быть более одной фабрики сессий)?

Ответы [ 3 ]

4 голосов
/ 12 мая 2011

У меня была такая же проблема. Я решил это так:

Прежде всего, для разных баз данных должны быть разные файлы cfg.xml. Затем просто используйте объект конфигурации Hibernate всякий раз, когда вы хотите подключиться ко второй базе данных.

Configuration config = new Configuration().configure("<complete path to your cfg.xml file>");
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();

Я нашел это здесь: http://www.coderanch.com/t/468821/ORM/java/If-hibernate-cfg-xml-has

Я почти уверен, что это может быть расширено более чем на 2 базы данных. Надеюсь, это поможет.

2 голосов
/ 25 октября 2010

Мне нужно иметь несколько баз данных для разных клиентов.Как я могу обрабатывать несколько баз данных с Hibernate?Есть ли хорошие примеры, как это сделать?

Вам действительно нужно будет создать несколько SessionFactory (по одному на базу данных).

Теперь я могу перейти в спящий режимОбъект конфигурации, когда пользователь входит в систему, но как я могу создать / получить фабрику сеансов с этим объектом, чтобы для одной базы данных была только одна фабрика сеансов (конечно, если одновременно используется несколько баз данных, их может быть больше, чемодна сессия заводская)?

Используйте несколько уникальных Map<SomeKey, SessionFactory>.Если SessionFactory еще не создан, постройте его и сохраните на карте.

2 голосов
/ 25 октября 2010

Hibernate SessionFactory может обрабатывать только один DataSource одновременно, и, вообще говоря, каждый DataSource относится к одной и только одной базе данных. Поэтому, если вам нужно несколько баз данных, то самое простое решение - это почти наверняка несколько SessionFactory экземпляров.

Я не уверен, почему вы думаете, что это не будет разумно, хотя, мне кажется, это достаточно справедливо.

Некоторые СУБД допускают ограниченные ссылки на базы данных, что может позволить вам что-то делать с Hibernate и одним DataSource, но вы ничего не сказали нам о настройке базы данных.

...