Сделка "весна-монго" откатывает все назад
Есть ли решение для отката транзакции Монго для уже сохраненного документа?
У меня есть метод т.е.
@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"})
но это не откатывает первоначальное создание.
Есть ли решение? Спасибо
Примечание. Из-за технических требований я не хочу изменять текущий поток кода, т.е. сохранять, находить и изменять, обновлять.