RES: Erro com Subselect utilizando QueryDSL

23 views
Skip to first unread message

Lessandro Notaroberto Pyrâmides

unread,
Jul 15, 2012, 11:40:09 AM7/15/12
to jav...@googlegroups.com, jav...@googlegroups.com, javano...@googlegroups.com

Olá pessoal, boa tarde.

Descobri que o problema não é com a subquery, mas sim com o retorno da minha lista.

Ao efetuar um .list() com os campos que quero no select, existem alguns que estão nulos, neste

caso historicoAcesso.usuario.perfil.idPerfil” e “historicoAcesso.usuario.perfil.imagemPerfil.foto”.

Esses dois relacionamentos são do tipo Lazy e pode ser esse o motivo que está me retornando nullPointer, durante os

get()’s.

Alguém sabe como contornar esse problema?

Abs,

Att,

Lessandro

 

De: Lessandro Notaroberto Pyrâmides [mailto:lessandron...@gmail.com]
Enviada em: sexta-feira, 13 de julho de 2012 21:00
Para: jav...@googlegroups.com; jav...@googlegroups.com; javano...@googlegroups.com
Assunto: Erro com Subselect utilizando QueryDSL

 

Olá pessoal, boa noite.

Comecei a utilizar QueryDSL nesse momento, porém estou tentando criar uma SubQuery para

capturar elementos existentes. Segue:

 

JPQLQuery query = new JPAQuery(entityManager);

       QHistoricoAcesso historicoAcesso = QHistoricoAcesso.historicoAcesso;

       List<Object[]> historicos = query.from(historicoAcesso)

              .where(historicoAcesso.idHistoricoAcesso.in(new HibernateSubQuery().from(historicoAcesso).groupBy(historicoAcesso.usuario.idUsuario)

                    .list(historicoAcesso.idHistoricoAcesso.max()))).limit(8)

                          .list(historicoAcesso.dataLogin, historicoAcesso.dataLogout, historicoAcesso.usuario.idUsuario, historicoAcesso.usuario.nome,

             historicoAcesso.usuario.perfil.idPerfil, historicoAcesso.usuario.perfil.imagemPerfil.foto);

 

Porém ao executar a query com a subquery recebendo o erro de NullPointer.

Alguém sabe como solucionar esse problema?

Obs: Quando removo a subquery, a query funciona normalmente.

Agradeço desde já,

Abs,

Att,

-----------------------------------------------------------------------------------------------------
Lessandro Notaroberto Pyrâmides
Analista de Sistemas Java Web, Desktop, Mobile e .NET

MBA em Gestão de Projetos em TI – Universidade Federal de Juiz de Fora
MSN:
lessa...@hotmail.com
Emails:
lessandron...@gmail.com / lessa...@hotmail.com
Tels: +55 (32) 9108-6144 / (32) 8871-3868
Juiz de Fora - MG
-----------------------------------------------------------------------------------------------------

 

Lessandro Notaroberto Pyrâmides

unread,
Jul 20, 2012, 8:52:46 PM7/20/12
to jav...@googlegroups.com, jav...@googlegroups.com, javano...@googlegroups.com

Com a ajuda de um amigo, resolvi da seguinte forma:

 

    public List<HistoricoAcesso> getUltimosAcessos() {

       try {

           QHistoricoAcesso ha = QHistoricoAcesso.historicoAcesso;

           QUsuario usuario = QUsuario.usuario;

           QPerfil perfil = QPerfil.perfil;

           QImagemPerfil imagemPerfil = QImagemPerfil.imagemPerfil;

           JPAQuery query = new JPAQuery(entityManager);

           ListSubQuery<Long> subQuery = new SQLSubQuery().from(ha).where(ha.dataLogout.isNotNull()).groupBy(ha.usuario.idUsuario).list(ha.idHistoricoAcesso.max());

           List<Object[]> result = query.from(ha)

                 .innerJoin(ha.usuario, usuario)

                 .innerJoin(usuario.perfil, perfil)

                 .leftJoin(perfil.imagemPerfil, imagemPerfil)

                 .where(ha.idHistoricoAcesso.in(subQuery)).limit(8)

                 .list(ha.idHistoricoAcesso, ha.dataLogin, ha.dataLogout, usuario.idUsuario, usuario.nome, perfil.idPerfil, imagemPerfil.idFoto, imagemPerfil.foto);

           List<HistoricoAcesso> historicos = new HistoricoAcessoTransformer().transformTuple(result);

           return historicos;

       } catch (Exception ex) {

           System.out.println(ex);

           return null;

       } finally {

       }

 

O grande detalhe é agrupar os relacionamentos no innerJoin, com os objetos QueryDSL.

Reply all
Reply to author
Forward
0 new messages