IReport x Hibernate[RESOLVIDO]

Pessoal,

já olhei vários tópicos, e não consigo resolver meu problema, já estou a dias tentando, por isso venho aqui, pedir ajuda…

seguinte:

no IReport meu relarórios mostra os registros tudo certo, com conexão com o hibernate…

quando vou para a aplicação o relatório em PDF é exibido, mas sem nenhum registro

 // Esse list retorna as pessoas certas, olhei debugando 
		List pessoas = DAOFactory.getPessoaDAO().getSelecionar(codigoPessoa, "", "", "");

		Map parameters = new HashMap();
		
		InputStream stream = getClass().getResourceAsStream("/com/fejal/relatorios/RelFichaPessoa.jasper");
		
		try {
			JRBeanCollectionDataSource jrbc = new JRBeanCollectionDataSource(pessoas);
			byte[] bytes = JasperRunManager.runReportToPdf(stream, parameters,jrbc);

			if (bytes != null && bytes.length > 0) {
				res.setContentType("application/pdf");
				res.setContentLength(bytes.length);
				ServletOutputStream ouputStream = null;
				try {
					ouputStream = res.getOutputStream();
					ouputStream.write(bytes, 0, bytes.length);
					ouputStream.flush();
					ouputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

		} catch (JRException e) {
			e.printStackTrace();
		}

Quando uso um ResultSet o relatório funciona

JRResultSetDataSource jrbc  = new JRResultSetDataSource( rs  );

Seria bom recompilar o jrxml em tempo de execução?
se sim com fazer?

Alguém pode me ajudar???

Vc ja tentou passar um bean para o ireport ao invés de uma list?

Não sei como fazer isso…

Mas eu preciso de uma lista…

Depois de uma grande briga, e não sei porque tive pouca ajuda…

Primeiro os jar necessários:

jasperreports-3.6.0.jar
commons-beanutils-1.8.0.jar
commons-collections-3.2.1.jar
commons-logging-1.1.jar
iText-2.1.0.jar
poi-3.2-FINAL-20081019.jar

No IReport:

Vc cria uma conexão Hibernate
Na query do relatório escolha o tipo HQL

exemplo:

    From Pessoa p where p.codigoPessoa = $P{PcodigoPessoa}

Esse $P{PcodigoPessoa} é o parametro que vc vai passar para o relatório

Temos que criar esse parametro em "Report Inspector" / Parameters / Adiciona Parametro e diga seu tipo e valor default.

na Aplicação Web:


String codigoPessoa = req.getParameter("codigoPessoa") == null ? "0" : req.getParameter("codigoPessoa");
Session session = HibernateUtil.getSession();
ServletOutputStream servletOutputStream = res.getOutputStream();
try {
    Map<String, Object> parameters = new HashMap<String, Object>();

    // é o parametro do codigo da pessoa, que vai para o relatório
    parameters.put("PcodigoPessoa", Integer.parseInt(codigoPessoa));

    // è preciso passar a sessão para do hibernate para o relatório
    parameters.put(JRHibernateQueryExecuterFactory.PARAMETER_HIBERNATE_SESSION, session);
	        
    InputStream reportStream = getClass().getResourceAsStream("/com/fejal/relatorios/RelPessoa.jasper");
    res.setContentType("application/pdf");
    res.setHeader("Content-disposition", "attachment;filename=FichaPessoa.pdf");
    JasperRunManager.runReportToPdfStream(reportStream,servletOutputStream, parameters);
} finally {
      session.close();
}

servletOutputStream.flush();
servletOutputStream.close();