Это пример того, где декларативное управление транзакциями в Spring больше не удобно, и вам нужно переключиться на программное управление , чтобы получить необходимую гибкость. Это позволит вам внедрить, например, карту менеджеров транзакций в ваш уровень DAO и соответственно выбрать правильный, используя TransactionTemplate
, чтобы упростить задачу.
В качестве альтернативы, если вы работаете в контейнере, поддерживающем JTA, то вы можете использовать Spring * JtaTransactionManager
. Это делегирует управление транзакциями серверу приложений, сохраняя семантику Spring API. Это также означает, что произвольное число DataSources и SessionFactories может участвовать в одном диспетчере транзакций. Однако это означает, что ваши источники данных должны полностью управляться сервером приложений, который, вероятно, не будет работать для вас.