Вот поведение, которого я должен достичь 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");
}
}
В настоящее время откат не происходит, если создание сотрудника не удается. Счет обновляется одним независимо от успешного создания сотрудника или нет. Хотелось бы получить пояснения к многодокументным транзакциям при весенней загрузке, поскольку документация немного сбивает с толку.