Passar resultado da consulta no Hibernate para iReport

Olá pessoal!

Estou tentando passar os valores retornados de uma consulta no Hibernate para um relatório no iReport.

Mas apresenta o seguite erro:

Código:

    public void imprimirTodosAlunos(){
        try {
            HashMap map = new HashMap();
            Aluno a = new Aluno();
            Session sessao = HibernateUtility.getSession();
            Query select = sessao.getNamedQuery("todosAlunos");
            List objetos = select.list();
            Iterator item = objetos.iterator();
            map.put("Aluno", a);
            sessao.close();
            
             JRDataSource jds = new JRBeanCollectionDataSource(objetos);
            
            File file = new File("C:\\Documents and Settings\\Bruno\\Desktop\\SMS\\src\\Relatorio\\rlAluno.jasper");

             JasperViewer viewer = new JasperViewer(JasperFillManager.fillReportToFile(file.getAbsolutePath(),map,jds),true);
             viewer.setVisible(true);

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

Obrigado pela ajuda.


Ele não conseguiu pegar os dados desse cara aí, dá uma revisada na sua query, no seu HashMap você está tentando passar um novo aluno? Ele só vai carregar os registros do banco, não precisa desse new Aluno(). da uma estudada nisso que te falei e se não funionar posta a exceção de novo.

Ele não conseguiu pegar os dados desse cara aí, dá uma revisada na sua query, no seu HashMap você está tentando passar um novo aluno? Ele só vai carregar os registros do banco, não precisa desse new Aluno(). da uma estudada nisso que te falei e se não funionar posta a exceção de novo.

Olá!

Fiz as alterações abaixo mas o erro continua…

[code]
public void imprimirTodosAlunos(){
try {
HashMap map = new HashMap();
Session sessao = HibernateUtility.getSession();
Query select = sessao.getNamedQuery(“todosAlunos”);
List objetos = select.list();
Iterator item = objetos.iterator();
map.put(“Aluno”,item);
sessao.close();

        JRDataSource jds = new JRBeanCollectionDataSource(objetos);
        
        File file = new File("C:\\Documents and Settings\\Bruno\\Desktop\\SMS\\src\\Relatorio\\rlAluno.jasper");
        
        JasperViewer viewer = new JasperViewer(JasperFillManager.fillReportToFile(file.getAbsolutePath(),map,jds),true);
        viewer.setVisible(true);

    } catch (Exception e) {
        e.printStackTrace();
    }
}[/code]

Oi Brunodila, cara embaixo eu tenho um exemplo que eu implementei de teste, mas foi com JDBC em uma aplicação WEB, num Servlet, A query que aparece é a mesma que está no relatório, o map eu passei vazio, por que não tinha nenhum outro parâmetro, é interessante no caso do seu relatório ser Mestre-detalhe senão passa ele como vazio, seta o caminho como você fez. nesse caso eu mandei gerar direto em pdf. No seu caso, não precisaria do Iterator se não for mestre-detalhe, vc ta utilizando namedQuery, tente com SQLQuery, e uma query nativa, certifique-se de ser a mesma do relatório. Acho que deve dar certo, mas depende do que o seu relatorio exige.

 Class.forName(driver);
        Connection con = DriverManager.getConnection(url, login, pwd);
        Statement stm = con.createStatement();
        String query = "select * from biblioteca";
        ResultSet rs = stm.executeQuery(query);

        //implementação da interface JRDataSource para DataSource ResultSet
        JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);

        //executa o relatório
        Map par = new HashMap();
        par.put(" ", " ");

        String jasperFile = getServletContext().getRealPath(
                "/WEB-INF/report/") + "/";
        String path = getServletContext().getRealPath("/");
        /* Preenche o relatório com os dados. Gera o arquivo BibliotecaPessoal.jrprint    */
        try {
            // Aqui ele cria o relatório
            JasperPrint impressao = JasperFillManager.fillReport(jasperFile + "classic.jasper", par, con);

            // Grava o relatório em disco em pdf
            JasperManager.printReportToPdfFile(impressao, path + "/RelatorioLivros.pdf");

            // Redireciona para o pdf gerado
            response.sendRedirect("RelatorioLivros.pdf");

Olá!
Eu fiz mexi no relatório e no código, mas agora está dando outro erro.

    public void imprimirTodosAlunos(){
        try {
            HashMap map = new HashMap();
            Session sessao = HibernateUtility.getSession();
            Query select = sessao.getNamedQuery("todosAlunos");
            List objetos = select.list();
            map.put("","");
            sessao.close();
            
            JRBeanArrayDataSource jrdts = new JRBeanArrayDataSource(objetos.toArray());

            File file = new File("C:\\Documents and Settings\\Bruno\\Desktop\\SMS\\src\\Relatorio\\rlAluno.jasper");
            
            JasperPrint print = JasperFillManager.fillReport(getClass()
                   .getResourceAsStream(file.getAbsolutePath()),new HashMap(),jrdts);
            JasperViewer.viewReport("C:\\Documents and Settings\\Bruno\\Desktop\\SMS\\src\\Relatorio\\rlAluno.jasper",false,false);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
JRBeanArrayDataSource jrdts = new JRBeanArrayDataSource(objetos.toArray());  

Por vc está passando sua lista para array?

Tem um erro na linha 54 dessa classe ou nas próximas a ela, na classe PesquisaAluno tem um erro na linha 23 ou nas próximas a ela.

Como vc está fazendo a chamada desse método? Pelo que entendi é numa aplicação swing e ele é chamado através de um botão btnImprimir certo?

Certo,
estou chamando na tela de Pesquisa aluno através do botão imprimir.

Primeiramente eu declarei a classe

private ControleAluno ca;

Depois estou chamando o método no botão imprimir:

ca.imprimirTodosAlunos();

Certo, não precisaria passar a list para array, o erro parece ser nesse método mesmo, dá uma revisada nessa parte.