Сделка "весна-монго" откатывает все назад

Есть ли решение для отката транзакции Монго для уже сохраненного документа?

У меня есть метод т.е.

@Transactional
public Order createPerson(Person person, String name) {

    person.setName(name);

    personRepository.save(person);

    //generate a new personalNumber and saves it in PersonalNumber document
    PersonalNumber personalNumber = mongoOperations
        .findAndModify(Query.query(where("name").is(name)), new Update().inc("personalNumber", 1L), options().returnNew(true), PersonalNumber.class);

    if (personalNumber == null) {
        //throw exception
    }

    person.setPersonalNumber(personalNumber.getPersonalNumber());

    //save the person
    return personRepository.save(person);
}

Сначала я сохраняю Person без personalNumber в коллекциях Persons, затем я хочу сгенерировать personalNumber с помощью findAndModify(), используя name в качестве идентификатора. Если указано имя, увеличьте значение PersonalNumber в документе PersonalNumber. Если нет, то выбросить исключение. После этого назначьте персональный номер человеку и сохраните его снова.

У меня проблема с аннотацией к транзакции. Я хочу, чтобы транзакция откатывала первоначальное создание Person при сбое метода findAndModify(). Однако @Transactional не выполняет нужную задачу.

Я также использовал

@Transactional(rollbackForClassName = {"Exception"})

но это не откатывает первоначальное создание.

Есть ли решение? Спасибо

Примечание. Из-за технических требований я не хочу изменять текущий поток кода, т.е. сохранять, находить и изменять, обновлять.

0 ответов

Другие вопросы по тегам