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