Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Recuperando o ID de quem esta logado

Preciso recuperar o ID de quem esta logado no sistema, para informar esse valor em uma Query JPQL, porem eu acredito que o metodo que eu estou utilizando não esta funcionando.

Essa seria a Query JPQL que eu quero executar:

String consulta = "select p from PessoaTime p where p.pessoa.id = :pPessoa";

E essa e o paramentro que vai recuperar o ID

query.setParameter("pPessoa", pessoadao.pessoaLogada(pessoa));

Aqui esta o metodo pessoaLogada da PessoaDAO:

public Pessoa pessoaLogada(Pessoa pessoa) {

        Pessoa resultado = new Pessoa();

        String consulta = "select u from Pessoa u where u.nomeUsuario = :pUsuario";
        Query query=getEm().createQuery(consulta);

        query.setParameter("pUsuario", pessoa.getNomeUsuario());

        try {
            resultado = (Pessoa) query.getSingleResult();
        } catch (NoResultException ex) {
            return null;
        }catch (NonUniqueObjectException e) {
            return null;
        }
        return resultado;
    }

Lembrando que eu utilizo o Autorizador e PhaseListener do curso de JPA I

4 respostas

Olá,

PessoaTime é a entity, mas não entendi o significado de p.pessoa.id ?

Essa Query foi discutida no seguinte copito: https://cursos.alura.com.br/forum/topico-usando-datatable-22269

No tópico citado, foi informado que você estava fazendo a query incorretamente. E você disse que havia corrigido isso.

Você acha que essa consulta está correta?

String consulta = "select p from PessoaTime p where p.pessoa.id = :pPessoa";

E você não forneceu a classe PessoaTime.

Sugiro que faça os cursos de JPA e Hibernate.

solução!

Problema solucionado, ficou da seguinte forma:

TimeDAO:

public List<Time> listarMeusTimes(Pessoa pessoa) {
        String consulta = "select t from PessoaTime pt inner join pt.time t "
                + " where pt.pessoa.id = :pPessoa";
        Query query = getEm().createQuery(consulta);

        query.setParameter("pPessoa", pessoa.getId());

        List<Time> meustimes = query.getResultList();        
        return meustimes;
    }

TimeBean:

public List<Time> listarMeusTimes(){
        return getTimeDAO().listarMeusTimes(getPessoaBean().usuarioLogado());    
    }

meustimes.xhtml:

<p:dataTable value="#{timeMB.listarMeusTimes()}" var="time" >
                                    <p:column headerText="Id">
                                        <h:outputText value="#{time.id}" />
                                    </p:column>

                                    <p:column headerText="Nome">
                                        <h:outputText value="#{time.nome}" />
                                    </p:column>

                                </p:dataTable>