Откат весенней загрузки транзакции mongodb - PullRequest
0 голосов
/ 20 января 2020

Вот поведение, которого я должен достичь sh:

@Transactional(rollbackFor = NullPointerException.class)
    @PostMapping(consumes = {"application/json"})
    public Employee createEmployee(@Valid @RequestBody Employee employee) {
        Optional<Department> departmentOptional = departmentRepository.findById(employee.getDeptId());
        EmployeeAggregate employeeAggregate = employeeAggregateRepository.findAll().get(0);
        employeeAggregate.setTotalEmployeeCount(employeeAggregate.getTotalEmployeeCount()+1);
        employeeAggregateRepository.save(employeeAggregate); <--This line should be rolled back when exception is thrown.
        if(departmentOptional.isPresent()) {
            Department department = departmentOptional.get();
            return employeeRepository.save(employee);
        }
        else{
            throw new NullPointerException();
        }
    }

Существует два документа: Employees и EmployeeAggregate. Я хочу иметь возможность откатить количество сотрудников, хранящееся в EmployeeAggregate, если мне не удается создать сотрудника в документе Employees.

Вот мой файл конфигурации go:

@Configuration
public class MongoConfig {

    @Bean
    @Autowired
    @ConditionalOnExpression("'${mongo.transactions}'=='enabled'")
    MongoTransactionManager mongoTransactionManager(MongoDbFactory dbFactory) {
        return new MongoTransactionManager(dbFactory);
    }

    public @Bean MongoClient mongoClient() {
        return new MongoClient("localhost");
    }

    public @Bean
    MongoTemplate mongoTemplate() {
        return new MongoTemplate(mongoClient(), "EmployeeDatabase");
    }
}

В настоящее время откат не происходит, если создание сотрудника не удается. Счет обновляется одним независимо от успешного создания сотрудника или нет. Хотелось бы получить пояснения к многодокументным транзакциям при весенней загрузке, поскольку документация немного сбивает с толку.

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