весна @ Транзакционный откат на полпути - PullRequest
0 голосов
/ 17 апреля 2020

У меня странная проблема с @Transactional, дело в том, что она не выполняет полный откат ошибки, и я не понимаю, почему.

Это мой сервис:

@Transactional
public class AService {

    @Autowired
    private AuditRepository auditRepository;

    @Autowired
    private RequestStatusRepository requestStatusRepository;

    @Autowired
    private ApprovementRepository approvementRepository;

    public void approve(long approvementId) {
        updateStatus();
    }

    private void updateStatus(long approvementId){
        Approvement approvement = approvementRepository.findById(approvementId);
        updateApprovement(approvement);

        Request request = requestRepository.findById(approvement.getRequest().getId());
        updateRequest(request);
    } 

    private void updateApprovement(){
        approvementRepository.save(approvement);
    }

    private void updateRequest(Request request){
        requestRepository.save(request);
        auditRepository.save(new Audit(request));
    }
}

Это репозиторий утверждений, все они похожи:

@Repository
public class ApprovementRepositoryImpl implements ApprovementRepository {

    @Autowired
    private JpaApprovementRepository jpaApprovementRepository;

    private Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance(); 

    @Override
    public Approvement findById(long id) {
        return jpaApprovementRepository.findById(id).map(this::to).orElse(null);
    }

    @Override
    public void save(Approvement approvement) {
        jpaApprovementRepository.save(from(approvement));
    }

    public Approvement to(ApprovementEntity from){
        return mapper.map(from, Approvement.class);
    }

    public ApprovementEntity from(Approvement to){
        return mapper.map(from, ApprovementEntity.class);
    }
}

Хорошо, полученный запрос очень длинное поле и audRepository не может его сохранить, изменение в аудите никогда не происходило, и изменение в запросе откатывается, но изменение подтверждения утверждается.

Почему это происходит ? Я пробовал разные типы размножения и безуспешно перемещал аннотацию @Transactional из класса в метод publi c, любые идеи были бы хорошими, спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...