Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Utilização do findById e do existsByid

Fiquei curioso com o trecho do código, o uso dos dois no mesmo método não se tornaria onoroso? Já que estão pesquisando duas vezes uma para saber se existe e uma realmente para buscar?

Não seria melhor usar o findById e jogar a excessão em um orElseThrow para caso não existisse o objeto no optional?

2 respostas
solução!

Olá, Leonides!

Sua pergunta é muito pertinente e mostra que você está realmente prestando atenção nos detalhes da programação, o que é ótimo!

Você está correto em sua observação. O método existsById e o método findById fazem, essencialmente, a mesma coisa: eles verificam se um objeto com o ID especificado existe no banco de dados. A diferença é que o findById também retorna o objeto, enquanto o existsById apenas retorna um booleano indicando se o objeto existe ou não.

Usar ambos no mesmo método pode ser considerado ineficiente, pois você está basicamente fazendo a mesma consulta duas vezes.

A abordagem que você sugeriu, usando findById e lançando uma exceção com orElseThrow se o objeto não existir, é uma maneira mais eficiente de alcançar o mesmo resultado. Aqui está um exemplo de como isso pode ser feito:

public SeuObjeto getSeuObjetoPorId(Long id) {
    return seuRepositorio.findById(id)
        .orElseThrow(() -> new ObjetoNaoEncontradoException("SeuObjeto com id " + id + " não foi encontrado"));
}

Neste exemplo, SeuObjeto seria substituído pelo tipo de objeto que você está buscando, e seuRepositorio seria substituído pelo nome do seu repositório. ObjetoNaoEncontradoException é uma exceção personalizada que você pode criar para lidar com situações onde o objeto não é encontrado.

Espero ter ajudado e bons estudos!

Opa! Valeu Matheus, vou colocar como melhoria no código. Deixei como foi sugerido no curso para não ter problemas com os testes feitos.