Para fazer a conexão do JDBC com o iReport é tranquilo, porém como posso fazer a conexão do iReport com o Hibernate? No jasperreport muda alguma coisa também?
Não existe conexão com hibernate.
O que vc pode fazer é recuperar sua consulta numa List e passar ela pra o seu Report, que na minha opniao e a melhor opcao!
É exatamente como o Cassolato disse. Você tem que ter um método que retorne uma coleção populada e logo após enviar essa coleção para o iReport.
Na real, eu acho que a melhor opção é você passar o cursor (ResultSet) para o Ireport, e não uma lista populada, pois se o seu relatório retornar muitas informações vc consumirá memória desnecessária da JVM. Passando o ResultSet para o Irepor diretamente, ele busca direto do banco de dados as informações sem o overhead de popular uma coleção Java.
Você pode usar um método parecido com isso para chamar o relatório passando o seu ResultSet.
public static byte[] gerarPdf(String jasperFile, Map<String, Object> params,
ResultSet rs) throws Exception
{
byte[] bytes = null;
JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
try
{
params.put("REPORT_LOCALE", new Locale("pt", "BR"));
bytes = JasperRunManager.runReportToPdf(jasperFile, params, jrRS);
}
catch(Exception e)
{
log.error("Erro ao gerar PDF: ", e);
}
return bytes;
}
Abraço.
Ahh… só pra complementar a minha resposta.
Nem sempre o uso do hibernate para relatórios é interessante, por ele trabalhar direto com Objetos, e nem sempre as informações que vc traz para um relatório vem de um objeto, mas normalmente são informações sintetizadas, e pré processadas, vindo de queries, views, procedures, functions, etc.
Existe uma outra forma tbm de fazer isso, que é passar um objeto Connection para o Ireport, e dentro dele vc define a query, ou uma query recebendo parametros, os quais vc passa via o “Map” quando vc chama o relatório.
Bom isso resolve muitos problemas principalmente em sistemas grandes, e onde relatórios nem sempre são meras listagens.
Abraços
Juliano,
Muito interessante, mas isto não resolve o problemas para sub relatórios ou sub de subRelatórios que usam sql ultra chatos… que geram umas 1000 páginas de relatórios.
E o pior, não dá para você montar um feedback para o usuário do que está acontecendo no momento, que é essencial para relatórios demorados.
Bom até agora eu não descobri.
:okok: