IReport+Subrelatorio+Hibernate

Bom dia, estou tentando desenvolvendo um subrelatorio usando ireport e hibernate mas não ta funcionando, procurei varios exemplos na net mas não deu certo. Tenho uma tabela de cadastro de pacientes e um cadastro de convenios, cada um em sua respectiva tabela, eu preciso imprimir a ficha desse paciente e mostrar tambem qual o convenio que ele foi cadastrado. Na minha tabela de pacientes eu tenho uma FK de convenio.

Eu ja criei o relatorio que mostra o cadastro do paciente e está funcionando perfeitamente, o problema é para poder criar o subrelatorio de convenio. Alguem pode me ajudar?

Outro problema que tenho é que quando recuperdo a data cadastrada no mysql não consigo converter para ##/##/#### mas vem como esta no banco ####-##-##, ja adicionei a mascara no campo do relatorio mas continua errado. Estou usando o ireport 3.7.4.

Cara, apesar de conhecer e utilizar hibernate em minhas aplicações, para gerar relatorios utilizo JDBC.

na epoca q tentei gerar relatorio em Hibernate não consegui. por isso utilizo JDBC para manipular consultas para os relatorios e hibernate para cadastro, processamentos e outros

Como assim não conseguiu?

Tanto faz Hibernate ou JDBC,no fim o que vai ser passado pro Ireport é um List :smiley:

Correto, passo um list para o relatorio, mas como faço com o subrelatorio?

Veja se ajuda:
http://www.guj.com.br/posts/list/218802.java
[]s

Guevara, eu ja tinha olhado esse seu post mas não funcionou para mim, simplesmente o subrelatorio aparece em branco. Não sei o que pode ser.

Na aba ‘Propriedades’ do teu Subreport,o que tem na opção ‘When no Data’?

Então, vamos trocar informações, vc me ajuda a utilizar hibernate c/ subrelatorios e te ensino a utilizar os subrelatórios.

vamos ao meu problema e depois ao seu ok.

MEU Problema.
Quando vc gera relatorio vc tem um classe em java q gerar o relatorio. Está classe eu tenho porém ela está configurada para JDBC. não consegui configurar para hibernate, até cheguei a pesguisar a questão do list mas acabei deixando de lado.

Seu problemas
Para que eu possa te ajudar preciso saber qual a versão do teu iReport, tenho uns modelos de subrelatorios que podem te ajudar!
Assim q eu tiver um tempo vou colocar um passo a passo para vc montar um subrelatorio. é bem simples,

att.

Ta bom, não sei mais o que fazer. A minha situação é a seguinte:

Tabela Rah (Tabela de Pacientes)

-idRah (PK)
-descricao
-idConvenio (FK)

Tabela Convenio:

-idConvenio
-nome

Ai criei um relatorio pricipal com os dados de Rah e criei um Parametro chamado idConvenio.
Adicionei tambem um subreport nesse relatorio principal(Rah)
Ficou assim as propriedades do sureport:

Ai no meu subrelatorio eu criei apenas com o campo de nome do convenio.
Criei tambem um Parametro chamado idConvenio no subrelatorio.

Mas quando mando gerar ele não gera nada no subrelatorio. Alguem pode me ajudar?

Ok hvivox, vc conhece alguma coisa de hibernate? Ou sua duvida é so em como utilizar o hibernate com o ireport?
A minha classe que gera o relatorio está assim:

public class GeraRelatorio {

    JasperPrint jpt = null;

    public void geraRelatorio(Collection data) throws JRException, Exception {
        Map parameters = new HashMap();
        jpt = JasperFillManager.fillReport("RAH.jasper", parameters, new JRBeanCollectionDataSource(data, false));
        JasperViewer.viewReport(jpt, false);
    }
}

Então da minha aplicação eu instancio essa classe e chamo o metodo geraRelatorio passando um list de todos os os cadastros de Rah(Pacientes) que eu busquei com o hibernate.

private DaoRah dao = new DaoRah();
new GeraRelatorio().geraRelatorio(dao.listarTodos());

e a classe daoRah está assim:

public class DaoRah implements DaoGenerica<Rah> {

    private Session session;
    Transaction tx = null;

public List<Rah> listarTodos() {
        List<Rah> p = null;
        try {
            session = HibernateUtil.getSession();
            tx = session.beginTransaction();
            p = this.session.createCriteria(Rah.class).list();
        } catch (HibernateException e) {
            e.printStackTrace();
            tx.rollback();
        } finally {
            session.close();
        }
        return p;
    }

Claro que de modo resumido, esse metodo listarTodos que vai me retornar o list para passar para o relatorio.
Acho que resumindo é isso.

Respondendo a sua pergunta raf4ever na opção ‘When no Data’ tem ‘No Pages’.

parceiro! faz assim me envie o seu email via mensagem privada aqui msm pelo forum. Dessa forma vou lhe enviar uns modelos de subrelatorio que tenho aqui pronto.
O passo a passo lhe envio a noite sem falta qdo tiver um tempo.

blz

Qto ao hibernate nao tenho duvidas, minha duvida é mais no como gerar relatorio c/ hibernate.

Mude para ‘All Sections,No Details’ e veja se aparece o relatório.

[quote=hvivox]Qto ao hibernate nao tenho duvidas, minha duvida é mais no como gerar relatorio c/ hibernate.

[/quote]

Cara confesso que ainda não consegui entender a dificuldade :lol:

Se no fim das contas vc vai trabalhar com uma lista de objetos,qual a diferença de ser JDBC ou Hibernate?

Vc teria um exemplo de código em q vc tenta gerar o relatório usando Hibernate?

raf4ever, mudei como vc disse e continua sem buscar o convenio do paciente. Olha como ficou.
Eu coloquei como teste o parametro idConvenio para imprimir e ele sai como null, e coloquei tambem a propriedade idConvenio e essa sim vem com valor, o que está parecendo é que ele não está ligando o parametro com o valor da propriedade.

[quote=raf4ever][quote=hvivox]Qto ao hibernate nao tenho duvidas, minha duvida é mais no como gerar relatorio c/ hibernate.

[/quote]

Cara confesso que ainda não consegui entender a dificuldade :lol:

Se no fim das contas vc vai trabalhar com uma lista de objetos,qual a diferença de ser JDBC ou Hibernate?

Vc teria um exemplo de código em q vc tenta gerar o relatório usando Hibernate?[/quote]

Então, minha duvida é especificamente como passar uma LIST por parametro para dentro do relatórios, atualmente trabalho assim:
meu relatorio tem data inicio e fim, para isso passo por parametro um dateInicio e dateFim, apenas isso, minha duvida é como passo um list? para dentro do relatorio? utilizando o hibernate?

att.

Então hvivox. vc viu o meu exemplo anterior, la eu mostrei como passar esse list para o relatorio:

Codigo que gera o relatorio passando um list.

[code] JasperPrint jpt = null;

public void geraRelatorio(Collection data) throws JRException, Exception {
    Map parameters = new HashMap();
    jpt = JasperFillManager.fillReport("RAH.jasper", parameters, new JRBeanCollectionDataSource(data, false));
    JasperViewer.viewReport(jpt, false);
}

[/code]

Repare que esse metodo recebe uma collection como parametro, então vc so precisa fazer a sua pesquisa com data inicio e data fim (Com hibernate ou JDBC)e colocar esse retorno dentro de um list, ai vc passa esse list para o metodo, ai é gerado o relatorio

So uma observação que ainda continuo com problemas para gerar esse subrelatorio.