Является ли JPA подходящим ORM для этого сценария? - PullRequest
2 голосов
/ 28 ноября 2010

У нас есть центральная база данных для учетных записей. Он содержит информацию для входа в систему и поле с именем профиля базы данных. Профиль базы данных указывает, какое соединение с базой данных следует использовать для учетной записи. Например, у нас есть Profile1, Profile2, Profile3 ... ProfileN

Если указан пользователь, у которого есть Profile1, он будет использовать базу данных, отличную от пользователя, который указан как часть Profile2.

Мое понимание JPA состоит в том, что вам понадобится новый EntityManagerFactory для каждого профиля (модуля постоянства), даже если базы данных имеют одну и ту же схему, просто разные данные соединения. Поэтому, если бы у нас было 100 профилей, у нас было бы 100 фабрик Entity Manager, что не кажется идеальным.

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

Является ли мой единственный вариант иметь N EntityManagerFactory, и в этом случае они будут иметь серьезные последствия для этого (например, плохая производительность)?

Спасибо за любой совет.

Ответы [ 3 ]

3 голосов
/ 28 ноября 2010

То, о чем вы говорите, выходит за рамки абстракции JPA.Такие вещи, как управление определенным соединением, обычно более специфичны для конкретного поставщика.Например, с помощью Hibernate SessionFactory вы, безусловно, можете создавать новые сеансы из соединения JDBC aribtraty .Можно было бы рассмотреть такие подводные камни, как схемы генерации идентификаторов (вам, вероятно, придется использовать последовательности, сгенерированные в БД), и вы в основном рассчитываете на кэширование L2, но при тщательном программировании это может сработать.

2 голосов
/ 29 ноября 2010

Если вы используете пружину, то я знаю, что есть способ динамического переключения источника данных.Найти больше информации здесь

2 голосов
/ 29 ноября 2010

Просто используйте javax.persistence.Persistence#createEntityMananagerFactory(String,Map) и укажите на карте параметры подключения.Кэшируйте EMF и используйте соединения разумно, не смешивайте n совпадающих объектов из разных EMF.

...