1
resposta

Solução para o single getSingleResult()

Estava passando por um problema na lógica na Autenticação e Autorização, na hora de testar a tela de login colocando usuário e senha errada, o sistema estava levantando a exceção NoResultException com o seguinte código abaixo:

/*Classe UsuarioDao  Código Omisso...*/ 
public Usuario busca(String login, String senha) {
        TypedQuery<Usuario> query = this.manager.createQuery("select u from Usuario u where u.login = :login and u.senha = :senha", Usuario.class);
        query.setParameter("login", login);
        query.setParameter("senha", senha);

        /*Levantando Exception aqui nesta linha */        
        return query.getSingleResult();    
}

A solução foi utilzar Try e Catch

public Usuario busca(String login, String senha) {
        TypedQuery<Usuario> query = this.manager.createQuery("select u from Usuario u where u.login = :login and u.senha = :senha", Usuario.class);
        query.setParameter("login", login);
        query.setParameter("senha", senha);

        try{
            return query.getSingleResult();
        }catch(NoResultException e){
            e.printStackTrace();
            return null;
        }

    }

Para eu chagar nesta solução foi graças a Documentação no link abaixo: http://docs.oracle.com/javaee/6/api/javax/persistence/Query.html#getSingleResult()

1 resposta

Sua solução está correta, o método lança essa exceção caso não encontre nenhuma resultado.

O que se poderia fazer diferente é declarar que seu método busca lança (throws) NoResultException e tratar a exceção onde o método é chamado. Por exemplo no bean responsável pelo o login , tratando com a adição de uma mensagem de validação/erro para o usuário.