dúvida hibernate 3

3 respostas
lmprates

Olá Pessoal,

Tenho uma dúvida de como buscar o resulta de um HQL no hibernate?

estou utilizando o código:

Usuario user = (Usuario) session.createQuery("from modelo.Usuario where nome = '"+ 
       u.getUsuario() + "' and senha = '" + u.getSenha() + "'").iterate().next() ;

return user.getId();

porém está retornando o seguinte erro;

exception 

javax.servlet.ServletException: java.util.NoSuchElementException: No more results
	org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
	org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)


root cause 

java.util.NoSuchElementException: No more results
	org.hibernate.impl.IteratorImpl.next(IteratorImpl.java:117)
	hibernate.dao.UsuarioDAO.login(UsuarioDAO.java:57)
	br.com.kurotel.action.Login.execute(Login.java:20)

O que estou fazendo errado?

desde já agradeço qualquer ajuda.

3 Respostas

U
Usuario user = (Usuario) session.createQuery("from modelo.Usuario where nome = '"+ 
        u.getUsuario() + "' and senha = '" + u.getSenha() + "'").iterate().next() ;
 
 return user.getId();

é melhor antes de vc dar next verificar se existe o next

Iterator it =  session.createQuery("from modelo.Usuario where nome = '"+ 
        u.getUsuario() + "' and senha = '" + u.getSenha() + "'").iterate();

int id = 0;
if(it.hasNext()) {
Usuario user = (Usuario)  it.next();
id = user.getId();
}

return id;

agora vc já conferiu o usuario e senha , se esta cadastrado na base de dados ?

Paulo_Silveira

sua query nao ta tendo resultado. a size da List retornada pelo metodo list() da interface Query tem size() == 0; confira.

Quando precisa fazer isso, use query.uniqueResult()… ele da uma exception se o tamanho do resultado for diferente de 1.

victorcosta

Outra coisa, é recomendado q você não faça concatenação de strings na sua query
Faça assim:

Query q = session.createQuery("from modelo.Usuario where nome = :nome and senha = :senha")
    .setString("nome", u.getUsuario())
    .setString("senha", u.getSenha());
 
User user = (User) q.uniqueResult();
if (user != null) { // Encontrou um usuario no bd
    return user.getId();
} else {
    // O tratamento que você quiser
}
Criado 27 de junho de 2007
Ultima resposta 27 de jun. de 2007
Respostas 3
Participantes 4