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

У меня есть MainDB база данных и неизвестный номер (во время компиляции) UserDB_1, ..., UserDB_N баз данных. MainDB содержит имена этих UserDB баз данных в некоторой таблице (новые UserDB могут быть созданы во время выполнения).

Все UserDB имеют одинаковые имена и поля таблиц.

Как справиться с такой ситуацией в Hibernate? (структура базы данных не может быть изменена).

В настоящее время я планирую создать общие User классы, не сопоставленные ни с чем, и просто использовать собственный SQL для всех запросов:

session.createSQLQuery("select * from " + db + ".user where id=1")
    .setResultTransformer(Transformers.aliasToBean(User.class));

Что я могу сделать лучше? В идеале я хотел бы иметь отображения для таблиц и отношений UserDB и использовать HQL для необходимой базы данных.

Ответы [ 3 ]

0 голосов
/ 09 июня 2010

Объявлять и вводить разные SessionFactory (по одному на базу данных).

0 голосов
/ 13 декабря 2010

Прочтите эту статью в блоге Hibernate: http://in.relation.to/Bloggers/MultitenancyInHibernate

Стив говорит, что лучше использовать ConnectionProvider, чем отдельный SessionFactory.

Не забудьте отключить кэш второго уровня.

0 голосов
/ 09 июня 2010

База данных указывается при создании SessionFactory (через строку подключения DataSource). Если вы хотите использовать другую базу данных, просто перестройте SessionFactory с новым DataSource.

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