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-->
@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

Anderson Sousa

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

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar