Pessoal,
estou usando o EclipseLink com NB7.2 e MySql. Seguinte, tenho uma tabela de usuários na qual tenho uma coluna ‘SENHA’ que é criptografada com a função PASSWORD do MySql. Só que quando vou validar a senha do usuário, a função do MySql não está sendo reconhecida. Existe outra forma de fazer isso?
public Usuario validarSenha(String usuario, String senha) {
Query q = gerenciador.createQuery("SELECT u FROM Usuario u WHERE u.usuario = :usuario AND u.senha = PASSWORD(:senha)");
q.setParameter("usuario", usuario);
q.setParameter("senha", senha);
Usuario u = (Usuario) q.getSingleResult();
return u;
}
Alguém pode ajudar?
JPQL é <> de SQL.
Não existe a função PASSWORD em JPQL, apenas em SQL Nativo do seu banco.
Troque para Native Query e altere o que mais for necessário, aí vai funcionar.
Valeu, obrigado. Ficou assim:
public int buscarUsuario(String usuario, String senha) {
int id_usuario = 0;
try {
StringBuffer jpql = new StringBuffer();
jpql.append("SELECT id_usuario FROM tb_usuario ");
jpql.append("WHERE usuario = '");
jpql.append(usuario);
jpql.append("' AND senha = PASSWORD('");
jpql.append(senha);
jpql.append("') AND status = 'A'");
Query query = (Query) gerenciador.createNativeQuery(jpql.toString());
id_usuario = ((Long)query.getSingleResult()).intValue();
}
catch (NoResultException e) {
// javax.persistence.NoResultException: getSingleResult() did not retrieve any entities.
}
finally {
return id_usuario;
}
}