У меня есть проблема доступа к какому-транзакционному методу одновременно несколько потоковSpring + Hibernate - обработка параллелизма с методом @Transactional
Требование, чтобы проверить, если учетная запись уже существует, или в противном случае его создание, проблему с ниже кодом если два потока параллельно выполняют метод accountDao.findByAccountRef() с той же ссылкой на учетную запись, и если они не найдут эту учетную запись, то оба попытаются создать ту же учетную запись, которая была бы проблемой, Может ли кто-нибудь предложить мне какое-нибудь предложение о том, как преодолеть это ситуация?
Код наклеивается ниже
Благодаря Рамеш
@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED)
@Override
public void createAccount(final String accountRef, final Money amount) {
LOG.debug("creating account with reference {}", accountRef);
if (isNotBlank(accountRef)) {
// only create a new Account if it doesn't exist already for the given reference
Optional<AccountEO> accountOptional = accountDao.findByAccountRef(accountRef);
if (accountOptional.isPresent()) {
throw new AccountException("Account already exists for the given reference %s", accountRef);
}
// no such account exists, so create one now
accountDao.create(newAccount(accountRef, neverNull(amount)));
} else {
throw new AccountException("account reference cannot be empty");
}
}