Erro ao realizar select com criteria utilizando Entity Manager

9 views
Skip to first unread message

Lessandro Notaroberto Pyrâmides

unread,
Jun 2, 2012, 12:54:03 PM6/2/12
to jav...@googlegroups.com, jav...@googlegroups.com, javano...@googlegroups.com

Olá pessoal, boa tarde.

Mudei um pouco o meu modelo de transação do spring com o hibernate, e estou obtendo problemas

ao utilizar criteria com o entity manager. Não sei porque, mas ao efetuar o select ou junção com outras

tabelas, o sql é montado incorretamente como abaixo:

 

Hibernate:

    select

        this_.id_historico_acesso as y0_,

        this_.data_login as y1_,

        this_.data_logout as y2_,

        usuario1_.nome as y3_,

        usuarioima2_.foto as y4_,

        usuario1_.id_usuario as y5_

    from

        public.historico_acesso this_

    left outer join

        public.usuario usuario1_

            on this_.id_usuario=usuario1_.id_usuario

    left outer join

        public.usuario_imagem usuarioima2_

            on usuario1_.id_usuario=usuarioima2_.id_usuario

    where

        this_.data_logout is not null

    group by

        usuario1_.id_usuario

    order by

        this_.data_logout desc limit ?

 

Reparem que antes da tabela, é colocado automaticamente um “public.”. Com isso ocorre

a exceção que a tabela não existe. Alguém sabe explicar porque isso ocorre? Minha entidade

está com a anotação correta como abaixo:

 

@Entity

@Table(name = "historico_acesso")

public class HistoricoAcesso implements Serializable {

 

Meu Criteria não têm nada demais também:

 

    @Override

    public List<HistoricoAcesso> getUltimosAcessos() {

        try {

             Session session = (Session) getEntityManager().getDelegate();           

            Criteria criteria = session.createCriteria(HistoricoAcesso.class, "histAcesso");

            criteria.createAlias("histAcesso.usuario", "usuario", Criteria.LEFT_JOIN);

            criteria.createAlias("histAcesso.usuario.usuarioImagem", "usuarioImagem", Criteria.LEFT_JOIN);

            ProjectionList proList = Projections.projectionList();

            proList.add(Projections.property("idHistoricoAcesso"));

            proList.add(Projections.property("dataLogin"));

            proList.add(Projections.property("dataLogout"));

            proList.add(Projections.property("usuario.nome"));

            proList.add(Projections.property("usuarioImagem.foto"));

            proList.add(Projections.groupProperty("usuario.idUsuario"));

            criteria.setProjection(proList);

            criteria.add(Restrictions.isNotNull("dataLogout"));

            criteria.addOrder(Order.desc("dataLogout"));

            criteria.setMaxResults(10);

            criteria.setResultTransformer(new HistoricoAcessoTransformer());

            List<HistoricoAcesso> historicos = (List<HistoricoAcesso>) criteria.list();

            return historicos;

                        } catch (Exception ex) {

            return null;

        } finally {

        }

 

Classe HistoricoAcessoTransformer com a tupla:

 

    @Override

    public Object transformTuple(Object[] values, String[] aliases) {

        HistoricoAcesso ha = new HistoricoAcesso();

        ha.setIdHistoricoAcesso((Long) values[0]);

        ha.setDataLogin((Date) values[1]);

        ha.setDataLogout((Date) values[2]);

        Usuario usuario = new Usuario();

        usuario.setNome((String) values[3]);

        UsuarioImagem usuarioImagem = new UsuarioImagem();

        usuarioImagem.setFoto((byte[]) values[4]);

        usuario.setUsuarioImagem(usuarioImagem);

        usuario.setIdUsuario((Long) values[5]);

        ha.setUsuario(usuario);

        return ha;

    }

}

 

Agradeço desde já pela atenção,

Att,

Lessandro

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

Cursando 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) 8871-3868 / (32) 3213-6295
Juiz de Fora - MG
-----------------------------------------------------------------------------------------------------

 

Tiago Ribeiro

unread,
Jun 4, 2012, 9:16:20 AM6/4/12
to javano...@googlegroups.com, jav...@googlegroups.com, jav...@googlegroups.com
Bom dia...

O SGBD é postgres???

Se simProvavelmente, o Hibernate está colocando o public na frente do nome da tabela pois este é o schema dentro do SGBD onde ele está tentando encontrar esta tabela...

Verifique se as suas tabelas estão dentro do schema public...

Espero ter ajudado...



--
Você recebeu esta mensagem porque está inscrito no Grupo "javanoroeste" .
Academia Java e Academia Web em São José do Rio Preto.
DESTAQUE
http://www.destaquecapacitacao.com.br/
F: (17) 3216-7475 - fal...@destaquecapacitacao.com.br
Parceira oficial da Globalcode em SJ Rio Preto
--
Postar neste grupo, envie um e-mail para javano...@googlegroups.com
Cancelar inscrição envie e-mail para javanoroeste...@googlegroups.com
Mais opções, visite este grupo em http://groups.google.com/group/javanoroeste?hl=pt-BR
 
http://www.javanoroeste.com.br



--

Tiago Ribeiro Carneiro - Fernandópolis-SP


Lattes: http://lattes.cnpq.br/8906225695990479

"A felicidade não depende do que nos falta, mas do bom uso que fazemos do que temos."
Thomas Handy


Lessandro Notaroberto Pyrâmides

unread,
Jun 4, 2012, 9:31:12 AM6/4/12
to javano...@googlegroups.com
Falae amigo, bom dia.
Consegui resolver com a dica de um amigo do fórum...
Era exatamente isso, no xml o schema estava configurado como public. O
banco é mySQL.
Alterei e resolveu...
Obrigado,
Abs,
Lessandro

Tiago Ribeiro

unread,
Jun 4, 2012, 9:33:08 AM6/4/12
to javano...@googlegroups.com
Valeu... Parabéns....

Espero ter ajudado...
Reply all
Reply to author
Forward
0 new messages