У меня есть приложение Spring + Hibernate + JPA. Пользователь при входе в систему может выбрать из списка БД для подключения (это требования). Все БД имеют одинаковую схему, поэтому будут использоваться одни и те же объекты и DAO.
Прямо сейчас у меня есть один EntityManager (на данный момент я работаю с одной базой данных), который вводится в DAO следующим образом:
@PersistenceContext
private EntityManager entityManager;
Есть ли способ, чтобы DAO автоматически получал entityManager (управляемый Spring) на основе параметра / свойства, полученного от уровня сервиса? (Веб-слой отправляет своего рода контекст, и там будет имя / код / идентификатор выбранной базы данных).
Или мне нужно управлять этим сам (создавать все entityManager, помещать их на карту, сообщать DAO, какой из них использовать для каждого вызова)?
Прежде чем задать этот вопрос, я провел небольшое исследование, но результаты оказались неубедительными - большинство вопросов касалось модели, распределенной по 2 или более БД, и транзакций, охватывающих несколько БД, но это не относится ко мне.
В моем случае, как только пользователь подключен, он как будто подключился к приложению, в котором есть только один менеджер сущностей, тот, который используется для выбранной им базы данных. Нет переключения между сеансом DB или другими подобными вещами.
Спасибо.