В моем тестовом примере у меня есть транзакционный метод, который создает пользователя, а затем вызывает асинхронный метод в другом потоке, который извлекает этого пользователя из базы данных. В приведенном ниже коде пользователь не может быть найден в БД, и dao возвращает ноль. Как быть уверенным, что данные будут там для разных потоков? Кажется, что промывка не помогает. Нужно ли фиксировать вручную? Установка уровня изоляции READ_UNCOMMITED также не помогает.
@Transactional
public void createUser() {
User user = new User();
user.setLogin("test");
userService.save(user);
userService.flush();
logger.debug("New user id {}", user.getId()); //id=1
transactionalService.getUser(user.getId());
}
TransactionalService
@Async
@Transactional
public void getUser(Long id) {
User user = userDao.getById(id);
assertNotNull(user);
}