E ai pessoal tudo certo?
estou desenvolvendo um sistema com hibernate + jsf.
Na minha pagina estou exibindo os dados em um datatable, e esta tudo certo aperece o numero de dados corretamente.
Mas parece que ele esta executando a query varias vezes… quando faço um for ele repete o mesmo usuario varias vezes.
privateList<Atividade>ListToUser(StringusuarioLog2){Sessionsession=HibernateUtil.getSession();Queryq=session.createQuery("FROM Atividade as ativ where ativ.resposnavel.nome LIKE :usuarioLog2");q.setParameter("usuarioLog2","%"+usuarioLog2);List<Atividade>atividadesUser=q.list();setUserToMail(atividadesUser);returnatividadesUser;}privatevoidsetUserToMail(List<Atividade>atividadesUser){for(inti=0;atividadesUser.size();i++){System.out.println(atividadesUser.get(i).getResposnavel().getNome());Stringnome=atividadesUser.get(i).getResposnavel().getNome();StringemailUser=atividadesUser.get(i).getResposnavel().getEmail();//mail.EnviaMail(nome, emailUser);}}
rogelgarcia
No JSF essas várias chamadas acontecem mesmo… o pessoal mais especialista pode ter uma ideia de como minimizar…
JAVADRIANO
Obrigado por responder rogelgarcia…
Pois é… estou me batendo pois preciso enviar emails para cada usuario e assim não dando.
Se alguém puder me dar uma dica de como fazer para enviar e-mails dessa forma, com os contatos de e-mail vindos do banco.
Valeu…
Leozin
Pode ser que você esteja com eager loading ativado, aí quando o teu objeto é carregado do banco, já carrega todas as dependências juntos (e aí verás muitas queries sendo executadas)
JAVADRIANO
Vou dar uma olhada nisso Leozin…
Mas isso só não vai ser exibir as depêndencias né?
Leozin
Adriano,
Quando uma classe tem um atributo que na verdade é outra classe (digamos, Pessoa tem Veículos), essa associação é carregada automaticamente SE o fetch estiver configurado como EAGER. Se for LAZY, ele vai ser carregado somente quando você der um pessoa.getVeiculos().
Se todas as tuas classes estiverem como EAGER, a consulta mais simples vai efetuar muitos selects e vai deixar a tua aplicação muito lenta.
Verifique isso e depois poste aqui o resultado.
Abraço
JAVADRIANO
Leozin,
Desculpe se isso for muito básico, mas configurar para LAZY seria isso? Colocar no meu relacionamento: