Создание баз данных во время выполнения с Hibernate? - PullRequest
4 голосов
/ 05 мая 2011

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

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

Пользовательская вещь предназначена просто для иллюстрации концепции ...

Спасибо!

Ответы [ 4 ]

6 голосов
/ 05 мая 2011

На высоком уровне, что бы вы сделали для достижения чего-то подобного:

  1. Когда происходит событие триггера, выполните DDL, чтобы создать новую базу данных через соединение JDBC- вероятно, наиболее целесообразно, чтобы эта схема была сгенерирована hbm2ddl во время сборки.

  2. Создайте новый DataSource для этой базы данных и новый SessionFactory изDataSource

  3. Затем этот SessionFactory должен быть введен (или найден) на уровень доступа к данным вашего приложения, чтобы найти соответствующий SessionFactory для пользователя.

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

1 голос
/ 26 мая 2011

Я возвращаюсь немного поздно, но если вы планируете создать многопользовательское приложение SAAS, как вы сказали, вы также можете использовать разделение по ключу, например, идентификатор клиента.

В спящем режиме фильтрыпомочь вам сделать это ...

См .: http://www.lunatech -research.com / archives / 2011/03/04 / play-framework-writing-multitenancy-application-hibernate-filters

Это ссылка для игрового фреймворка, но она использует спящий режим, поэтому вы можете сделать почти то же самое с классическим Java EE материалом ...

1 голос
/ 05 мая 2011

Я следил за обсуждением в моей компании несколько раз назад, и они говорили о весенней поддержке для этого.

Некоторые вещи, которые могут вас заинтересовать: http://blog.springsource.com/2007/01/23/dynamic-datasource-routing/ http://static.springsource.org/spring/docs/3.0.x/javadoc-api/index.html?org/springframework/aop/target/HotSwappableTargetSource.html

AbstractRoutingDataSource представляется интересным для вашего случая. Кто-то также сказал, что это может быть отключение 2-го кэша гибернации, чтобы подтвердить ...

1 голос
/ 05 мая 2011

Согласен с Мэттом Б, но вы уверены, что это хорошая идея?

Полагаю, у вас разные клиенты и вы хотите хранить данные каждого в отдельной базе данных (или что-то в этом роде). Почему бы не сохранить все данные о клиентах в одной базе данных и не отфильтровать их по идентификатору клиента?

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