2010-10-25 7 views
4

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

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

EDIT:

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

ответ

2

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

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

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

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

+1

Thanx для этого ответа, но поскольку все базы данных идентичны, мне удалось использовать только один SessionFactory. Теперь я создаю объект Connection и использую метод sessionFactory.openSession (соединение); для перехода в спящий режим. Теперь я могу динамически подключаться к любой базе данных, которую я хочу. – newbie

+0

@newbie: Я не хочу быть грубым, но вы должны попытаться дать соответствующие сведения, задавая вопрос, читатели не читают мнения. –

+0

Извините за это, я постараюсь быть более конкретным в следующий раз – newbie

2

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

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

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

+0

Я не знаю, как я могу создать динамически новые сеансовые фабрики и сопоставить их с srping framework, поэтому я могу использовать сессию спящего режима в своих DAO. – newbie

+0

@newbie: Вы ничего не говорили о создании их динамически. Это действительно была бы плохая идея. Hibernate не является инструментом для этой работы. – skaffman

+0

Почему? Одна фабрика сеансов для клиентов, созданная динамически, когда пользователи входят в систему.Я не вижу никаких проблем с этим, но я просто не знаю, что было бы лучшим способом его реализовать. – newbie

4

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

Прежде всего, должны быть разные файлы 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-х баз данных. Надеюсь, это поможет.

Смежные вопросы