У меня есть две базы данных: Oracle и PostgreSQL, где у меня есть несколько схем — по одной на каждого клиента. Мне нужно иметь возможность маршрутизировать источники данных по веб-запросу. Я пытался использовать AbstractRoutingDatasource Spring, но он работает только с одним диалектом. Есть ли другие решения этой задачи?




Я нашел решение. Вы можете явно указать Hibernate, какой диалект выбрать, используя свойство hibernate.dialect. Таким образом, вы можете реализовать свой собственный класс расширения диалекта org.hibernate.dialect.Dialect, переопределить все общедоступные методы и делегировать вызовы определенным диалектам. Хорошо, что Hibernate вызывает эти (Dialect) методы перед выполнением каких-либо запросов к базе данных. В моем конкретном случае я реализовал собственный диалект с картой диалектов, которые мне нужны для моего проекта, и теперь я могу использовать те же репозитории и свободно выбирать Postgresql, Oracle или MySQL в зависимости от вошедшего в систему пользователя.
Отличное решение и объяснение, большое спасибо!
Зачем вам это в одном приложении? Разве вы не можете настроить несколько приложений, каждое из которых будет работать с собственной базой данных? И просто выберите нужный. Создайте репозиторий и повторно используйте его во всех своих приложениях.