String sql="Select p from Pessoa p where p.login LIKE :log ";
Query q = em.createQuery(sql);
q.setParameter(1,login);
q.setParameter(2,senha);
Erro com Query com clausula AND com JPA e toplink
D
Estou precisando de query de login que por consequencia deve vereficar no login e senha.
Estou fazendo assim:
Esta acusando o seguinte erro:
Exception in thread "main" java.lang.IllegalArgumentException: An exception occured while creating a query in EntityManager
at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl.createQuery(EntityManagerImpl.java:180)
at prof.negocio.Autenticador.login(Autenticador.java:32)
Eu agradeço qualquer sugestão.
2 Respostas
1. String sql="Select p from Pessoa p where p.login LIKE :log "; 2. 3. Query q = em.createQuery(sql); 4. q.setParameter(1,login); 5. q.setParameter(2,senha);
o detalhe é que vc tá setando 2 parâmetros e só está passando 1... e vc só comparou o login....vc tem que comparar user com login AND senha...
colega não sei se ainda precisa da ajudar...mas eu faço assim(eu uso Hibernate e não toplink, porém como a JPA abstrai do framework vai funcionar certinho com toplink...):
public User GetLogin(String login, String password) {
Query query = em.createQuery("SELECT u FROM User u WHERE u.login = :login AND u.password = :password");
query.setParameter("login", login);
query.setParameter("password", password);
List rs = qry.getResultList();
if(rs.size() > 0) {
return (User) rs.get(0);
} else {
return null;
}
}
}
se não conseguir manda ai a duvida..
:idea: Fiz um pouco diferente. Acrescentei o SQL lá na classe login.java que havia criado:
@Entity
@Table(name = "login")
@NamedQueries({@NamedQuery(name = "Login.findByLogin", query = "SELECT l FROM Login l
WHERE l.usuario = :usuario and l.senha = :senha")
No botão Confirmar fiz o seguinte:
@Action
public void confirmarLogin() {
try {
String pwd = new String(txtSenha.getPassword()); //Pega a senha de um JPasswordField
javax.persistence.Query query = em.createNamedQuery("Login.findByLogin"); // <== Busca na nossa entidade
query.setParameter("usuario", txtUsuario.getText()); //Comparamos os parâmentros
query.setParameter("senha", pwd); //Comparamos os parâmentros
Login u = (Login) query.getSingleResult();
setMenuItemStates(loginState.LOGADO); //Atualizamos os estado dos menus
painelLogin.setVisible(false); //Desaparece com o painel de login.
}catch(Exception e){
JOptionPane.showMessageDialog(null, "Infelizmente, usuário e senha não conferem!");
setMenuItemStates(loginState.NOLOGADO); //Deu zebra, então não habilita os menus
painelLogin.setVisible(true); //O painel continua vizivel
txtUsuario.requestFocus(); //Dá foco ao JTextField
}
}
Ficou bem interessante. Espero que ajude.
Qualquer coisa, chame o homem aranha. :shock:
Links úteis: http://ironbark.bendigo.latrobe.edu.au/subjects/OAD/UnitMaterial.html
Criado 2 de dezembro de 2007
Ultima resposta 10 de jan. de 2009
Respostas 2
Participantes 3