Pessoal, estou fazendo um login com jsf e hibernate e estorou o seguinte erro
Stack Trace
javax.servlet.ServletException: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Usuario is not mapped [SELECT u from Usuario u where u.nome = :nome and u.senha = :senha]
javax.faces.webapp.FacesServlet.service(FacesServlet.java:671)
A minha Query está assim:
public Usuario getUser(String nome, String senha) {
try {
String jpql = "SELECT u from Usuario u where u.nome = :nome and u.senha = :senha";
Usuario usuario = (Usuario) manager.createQuery(jpql, Usuario.class)
.setParameter("nome", nome)
.setParameter("senha", senha).getSingleResult();
return usuario;
} catch (NoResultException e) {
return null;
}
}
E o nome do Usuario está em maiúsculo mesmo, pesquisei bastante e ainda não encontrei uma solução, sendo que eu tenho uma query que está quase do mesmo jeito para listar os usuarios, está como SELECT u from Usuario u e funciona perfeitamente, gostaria de uma ajuda, obrigado desde já
Ou a classe usuário não contém a anotação @Entity ou não está no arquivo .hbm.xml ou você não a está referenciando no persistence.xml ou você não está dizendo ao JPA que deve descobrir as entidades automaticamente.
Então n faz sentido funcionar em um lugar mas em outro sim.
Verifica os imports se estão igual ao lugar que funciona. Principalmente o import da classe Usuario, se é a correta.
Sim, mas d qualquer jeito está com erro e deve funcionar com Usuario. Vc pode ter piorado e n avançado.
Chessuis, pelo amor de Deus, tira a concatenação da JPQL:
where u.nome = “+nome+” and u.senha = :"+senha
Usa parametros SEMPRE. Isso ai permite sql injection.
Beleza kkkk, fiz isso pra testar, e sqlinjection não é tanto um problema agora, que isso é uma atividade de curso
Deixei assim agora
public Usuario getUsuario(String nome, String senha) {
try {
Usuario usuario = (Usuario) manager
.createQuery("select u from Usuario u where u.nome = :name and u.senha = :senha")
.setParameter("name", nome)
.setParameter("senha", senha)
.getSingleResult();
return usuario;
} catch (NoResultException e) {
return null;
}
}
E ele volta o erro
javax.servlet.ServletException: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Usuario is not mapped [select u from Usuario u where u.nome = :name and u.senha = :senha]
Se certifica q neste momento da execução já foram mapeadas as classes.
Ou na mesma execução roda o outro comando q funciona antes deste, só pra testar.