Opa Fala Lucas, posso dar um exemplo que eu estou fazendo aqui?
vou tentar simplificar o maximo possivel o uso do TRY CACTH.
public Optional<Produto> buscarProdutoEstoque(Long produtoId) {
var jpql = "SELECT p FROM Produto p JOIN FETCH p.estoque WHERE p.id =: produtoId";
Produto produto;
try {
produto = entityManager.createQuery(jpql, Produto.class)
.setParameter("produtoId", produtoId)
.getSingleResult();
} catch (NoResultException ex) {
produto = null;
}
return produto == null ? Optional.empty() : Optional.of(produto);
}
Esse metodo meu, ele está fazendo uma pesquisa no meu banco de dados, procurando um produto por id que estou passando por parametro, e observe o código dentro do try é esse.
try {
produto = entityManager.createQuery(jpql, Produto.class)
.setParameter("produtoId", produtoId)
.getSingleResult();
aqui no TRY se eu passar um id que tenha cadastrado o produto no banco ele vai retornar o produto sem problemas nenhum, o meu catch é quando esse resultado não acontece, por exemplo, passar um id que nao tenha um produto cadastrado no banco com esse id, então ela vai retorna um produo vazio, ou seja vai cair no catch.
} catch (NoResultException ex) {
produto = null;
}
ai quando cair no catch, caiu no catch pq deu um erro NoResultException entao o uso do try catch é que no try digamos que seje o nosso caminho feliz sem erro nenhum, o catch é pra capturar alguma exceção lançada, isso pode ter sido ocorrido por algum problema que aconteceu.