Código errado:

TypedQuery<pessoa> consulta = ...
Pessoa pessoa;
try {
    pessoa = consulta.getSingleResult();
} catch(Exception e) {
    pessoa = null;
}

Este é um exemplo de consulta J2EE EJB3. O método getSingleResult lança exceção em três casos:

  1. Quando existe mais de um resultado;
  2. Quando não há resultado;
  3. Quando a consulta não pôde ser executada devido a uma falha ao acessar o banco de dados ou algo relacionado. O código acima trata qualquer tipo de exceção! Um típico try/catch pega tudo. Usar null como resultado pode ser correto para o segundo caso listado acima, mas não é correto para o primeiro e terceiro casos. Em geral, não deve-se capturar mais exceções do que o necessário. O tratamento de exceção correto é o abaixo.

Código correto:

TypedQuery<pessoa> consulta = ...
Pessoa pessoa;
try {
    pessoa = consulta.getSingleResult();
} catch(NoResultException e) {
    pessoa = null;
}