Вы можете изменить тип распространения внутренней транзакции:
@Transactional(propagation = Propagation.REQUIRES_NEW)
Это создаст новую внутреннюю транзакцию и приостановит внешнюю транзакцию. Это может быть полезно, если вам нужна внутренняя транзакция для фиксации, но вам нужна внешняя транзакция для откатки, если есть какие-либо проблемы в другом месте.
Я никогда не использовал класс @Transactional
, но свойство propagation
на самом деле довольно полезно знать.
Я использовал его в нескольких случаях, чтобы переопределить значение по умолчанию Propagation.REQUIRED
, которое гласит: «создать новую транзакцию, если она еще не существует - в противном случае поддержка текущая транзакция», в соответствии с Docs.
Кстати, я использую:
org.springframework.transaction.annotation.Transactional
Так что мой ответ не применяется, если вы используете альтернативу @Transactional
Также обратите внимание, что различие внутренней и внешней транзакции основано на HQL, поэтому вам не нужно беспокоиться о используемом вами диалекте SQL.