Spring's AbstractPlatformTransactionManager
имеет свойство с именем validateExistingTransaction
, которое управляет этим поведением.Javadoc утверждает, что:
При участии в существующей транзакции (например, с PROPAGATION_REQUIRES или PROPAGATION_SUPPORTS, обнаружившей существующую транзакцию), характеристики этой внешней транзакции будут применяться даже к внутренней области транзакции.Валидация обнаружит несовместимый уровень изоляции и настройки только для чтения в определении внутренней транзакции и соответственно отклонит участие, выдав соответствующее исключение.
Поскольку распространение по умолчанию для Spring @Transactional
, аннотация - REQUIRED
и по умолчаниюСтратегия валидации неверна, я ожидаю, что Spring будет использовать существующую транзакцию, созданную из вызова метода tt
в режиме только для чтения.
Если вы хотите иметь транзакцию только для чтения, вы должны аннотировать свой метод с помощью:
@Transactional(propagation=Propagation.REQUIRES_NEW, readOnly=true)