Hibernate + iReport

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: