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!