Preencher Relatórios JasperReport com Hibernate

Ola pessoal,
Estou com problemas para gerar relatórios na minha aplicação.

Utilizo Hibernate com Annotations, JasperReport

Tenho a Classe Cliente

@Entity
public class Cliente implements java.io.Serializable {
    @Id
    private Integer codigo;
    @Column(nullable = false)
    private String nome;
    @ManyToOne()
    private Cidade cidade;

   //Getters e Setters

}

Busco uma List no banco;

envio para o JRBeanCollectionDataSource(cliente);

o problema é que o Jasper não encontra os atributos da classe Cidade que esta associada a classe Cliente

 java.lang.NoSuchMethodException:Unknown property 'nome_cidade'.

Já pesquisei em varios lugares uma forma de preencher relatórios com o Hibernate, todas as que encontrei não resolveram o problema, então tentei buscar um objeto Connection para gerar um ResultSet e enviar como parametro para o metodo JasperFillManager.fillReport(), porem o objeto Connection retornado pelo Hibernate vem nulo.

private Connection getConnection() {
        try {
            return HibernateUtility.getSession().disconnect();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }

ou

private Connection getConnection() {
        try {
            return HibernateUtility.getSession().close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }
2008-02-22 12:40:41,750 WARN  engine.query.JRJdbcQueryExecuter  -> The supplied java.sql.Connection object is null.

Se alguem souber como buscar um Connection valido, ou saiba alguma outra forma de preencher relatórios, será bem vinda!

Valew t+

Cara, eu utilizo da seguinte forma com Hibernate:

[code]
try {
// Um List com os registros que vêm do DAO
List dataSource = ClasseDoObjetoDAO.getObjetos();

// Um HashMap com os parâmetros
HashMap params = new HashMap();

// Exibicao do Relatorio
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(dataSource);
JasperReport report = (JasperReport) JRLoader.loadObject(getClass().getClassLoader().getResource("relatorio/nome_do_rel.jasper"));

JasperPrint impressao = JasperFillManager.fillReport(report, params, ds);

JRViewer viewer = new JRViewer(impressao);

JInternalFrame frameViewer = new JInternalFrame("Relatorio");
frameViewer.setSize(800, 600);
frameViewer.setMaximizable(true);
frameViewer.setClosable(true);
frameViewer.setResizable(true);
frameViewer.add(viewer);

FrmPrincipal.dpPrincipal.add(frameViewer);
frameViewer.setVisible(true);
frameViewer.setMaximum(true);

} catch (Exception e) {
Log.registraErro(“Problema ao gerar Relatorio.\n” + e.getMessage());
}[/code]

Mas para que funcione, o relatório deve ter sido configurado corretamente lá no iReport.
Verifique se está.

Qualquer coisa, tenho um método também para obter um Connection do Hibernate que utilizo às vezes, mas essa forma não é recomendada.

Falow

Cara, até sei que gostam desse negócio de Collection, mas vai ai a dica. Usa os mapeamentos em XML, sem Annotation. Faz tudo no iReport e depois de compilado em .jasper, passa os parâmetros via Hibernate Annotation.

PS: Antes que reclamem, usem um Hibernate Tools da vida pra fazer esses “malditos” XMLs.

Abraços