Fórum No query defined for that name #501984
21/11/2014
0
Eu não estou conseguind realizar uma autenticação via interfece. Gostaria de saber com realizar este procedimento via as classes abaixo especificadas.
<--INTERFACE DE COMUNICAÇÃO-->
<--SESSION BEAN-->
<--MANAGER BEAN-->
<--ERRO DE EXECUÇÃO-->
<--INTERFACE DE COMUNICAÇÃO-->
@Local
public interface SessionBeanLocal<T, Long extends Serializable> {
public void addEntity(T entity);
public T updateEntity(T entity);
public T getEntityById(Class<T> classToCast, Long ID);
public T getEntity(Class<T> classToCast, String query, Object... values);
public List<T> getList(Class<T> classToCast);
}
<--SESSION BEAN-->
@Stateless
public class SessionBean<T> implements SessionBeanLocal {
@PersistenceContext(unitName = "EstudoJSF-PU")
private EntityManager entityManager;
@Override
public void addEntity(Object object) {
if (object != null) {
entityManager.persist(object);
}
}
@Override
public Object updateEntity(Object object) {
if (object != null) {
return entityManager.merge(object);
}
return null;
}
@Override
public Object getEntityById(Class classToCast, Serializable ID) {
return entityManager.find(classToCast, ID);
}
@Override
public Object getEntity(Class classToCast, String query, Object... values) {
Query q = createQuery(query, values);
return (Object) q.getSingleResult();
}
private Query createQuery(String query, Object... values) {
Query q = entityManager.createNamedQuery(query);
for (int i = 0; i < values.length; i++) {
q.setParameter(i, values[i]);
}
return q;
}
@Override
public List getList(Class classToCast) {
CriteriaQuery query = entityManager.getCriteriaBuilder().createQuery(classToCast);
query.select(query.from(classToCast));
return entityManager.createQuery("SELECT o FROM " + classToCast.getSimpleName() + " o").getResultList();
}
<--MANAGER BEAN-->
@ManagedBean
@SessionScoped
public class Autenticacao implements Serializable {
@EJB
private SessionBeanLocal beanLocal;
private Usuario usuarioLogado = new Usuario();
public Autenticacao() {
}
public Usuario getUsuario(String login, String senha) {
return (Usuario) beanLocal.getEntity(Usuario.class, "select u from usuario u where u.login=:login and u.senha=:senha", login, senha);
}
public String acesso() {
Usuario usuario = getUsuario(usuarioLogado.getLogin(), usuarioLogado.getSenha());
if (usuario == null) {
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
request.getSession().setAttribute("usuarioLogado", usuario);
FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Usuario / Senha Inválidos", "Usuario / Senha Inválidos");
FacesContext.getCurrentInstance().addMessage(null, fm);
return "usuarioInexistente.xhtml";
} else {
return "usuariocomum.xhtml";
}
}
public Usuario getUsuarioLogado() {
return usuarioLogado;
}
public void setUsuarioLogado(Usuario usuarioLogado) {
this.usuarioLogado = usuarioLogado;
}
}
<--ERRO DE EXECUÇÃO-->
16:40:28,701 ERROR [org.jboss.as.ejb3.invocation] (default task-30) JBAS014134: EJB Invocation failed on component SessionBean for method public abstract java.lang.Object br.edu.ifpb.project.sessionbean.SessionBeanLocal.getEntity(java.lang.Class,java.lang.String,java.lang.Object[]): javax.ejb.EJBException: java.lang.IllegalArgumentException: No query defined for that name [select u from usuario u where u.login=:login and u.senha=:senha] ... Caused by: java.lang.IllegalArgumentException: No query defined for that name [select u from usuario u where u.login=:login and u.senha=:senha]
Anderson Sousa
Curtir tópico
+ 0
Responder
Posts
22/11/2014
Ronaldo Lanhellas
Tente assim:
return (Usuario) beanLocal.getEntity(Usuario.class, "select u from Usuario u where u.login=:login and u.senha=:senha", login, senha);
Responder
Gostei + 0
22/12/2014
Anderson Sousa
Valeu cara! Consegui resolver agora!
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)