Anotação Transactional Spring

25/11/2020

3

Bom dia, estou enfrentando problemas em um projeto da seguinte forma.
utilizo a anotação Transactional do spring para consultar o status de uma mesa , se ela não está ocupada alterar o status para ocupado e salvar o objeto mesa, se está ocupada apenas abrir a mesa para adicionar os produtos, acontece que quado existe 2 requisições proximas da mesma mesa a consulta da segunda requisição não está retornando false enquanto não chegar ao término da primeira transação, fiz um exemplo utilizando com uma thread e dois metodos separados, quando tiro a anotação Transactional o código funciona e na segunda requisição o status da mesa retorna true(ocupada), porém tirando a anotação fico sem a possibilidade de rollback, alguém pode me ajudar ?

Segue abaixo o trecho de código.


@Service
public class TesteServiceImpl implements TesteService {

@Autowired
private MesaRepository mesaRepository;

@Override
@Transactional
public String teste() throws MaximaValidacaoException {
// Comanda nome = Comanda 14
Comanda comanda = mesaRepository.carregaPorId(1L);
if (comanda.getOcupado()) {
return "Comanda ocupada (teste).";
}
comanda.setOcupado(Boolean.TRUE);
comanda = mesaRepository.salvaComanda(comanda);
try {
Thread.sleep(5000);
} catch (InterruptedException interruptedException) {
}
return "Salvou comanda como ocupada: " + comanda.getOcupado();
}

@Override
@Transactional
public String teste1() {
Comanda comanda = mesaRepository.carregaPorId(1l);
//comanda.setOcupado(Boolean.FALSE);
//comanda.setNome("TESTE 01");
//comanda = mesaRepository.salvaComanda(comanda);
return "Comanda ocupada: " + comanda.getOcupado(); // imprime false
}

}
Marco Christovam

Marco Christovam

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários,
consulte nossa política de privacidade.

Aceitar