Я не знаю простого решения вашей проблемы с помощью Spring.
Однако вы можете использовать перехватчики Hibernate при условии, что ваши конкретные базы данных / источники данных могут быть доступны через одно соединение с базой данных master / admin. Этот пост в блоге подробно объясняет, как это делается, но суть в том, чтобы динамически заменять имена таблиц в операторах SQL, генерируемых Hibernate, квалифицированными именами, идентифицирующими разные базы данных. Это относительно легко понять и поддерживать, и хорошо работает в мультитенантной настройке моей компании.
Кроме того, вы можете попробовать написать свой собственный TransactionManager
, используя HibernateTransactionManager
в качестве отправной точки, добавив поддержку работы с несколькими фабриками сессий. Однако это будет означать, что вам придется по-настоящему погрузиться во внутреннюю среду поддержки Spring ORM, и это то, что я попробовал, но затем отказался от первого подхода. Я уверен, что это можно сделать с умеренными усилиями, но предыдущее решение уже делало эту работу за нас.