REQUIRED: Это наиболее распространенный тип. Если метод, помеченный @Transactional, вызывается внутри другого метода, который уже выполняется в транзакции, то новая транзакция не создается. Вместо этого метод присоединяется к уже существующей транзакции. Если метод вызывается вне транзакционного контекста, создается новая транзакция. REQUIRES_NEW: Всегда создает новую транзакцию. Если текущая транзакция существует, она будет приостановлена и создана новая транзакция для выполнения метода. MANDATORY требует, чтобы текущая транзакция уже существовала при вызове метода. Если в момент вызова метода нет активной транзакции, то выбрасывается исключение IllegalTransactionStateException. В примере выше, если бы метод doAction() сервиса FirstService не был бы помечен аннотацией @Transactiona, то было бы выброшено исключение. NESTED: Создает вложенную транзакцию, которая является подчиненной внешней транзакции. Если внешняя транзакция откатывается, вложенная транзакция также будет откатываться,