3
respostas

Relatório com Html e JPA / JSF

Boa tarde pessoal, estou fazendo um relatório no meu sistema, e consegui montar o layout, agora preciso de uma orientação, pois estou completamente perdido.

Inicialmente essa é minha página que terá o relatório http://prntscr.com/dg49ya

Para entender bem isso o Título do relatório são os Bairros Embaixo vem o nome da pessoa seguido do logradouro depois embaixo vem uma lista de Medidas Cautelares

http://prntscr.com/dg4b5q

Tudo isso inicialmente esta como texto estático, agora vem meu problema, estou perdidasso em como puxar isso do banco de dados usando JPA e exibir elas dessa forma. Agrupado por bairro, pegar as pessoas daquele bairro, e pegar a lista das medidas daquela pessoa.

estou pensando em usar o no xhtml, porém nao estou sabendo como retornar essas informações usando JPA.

Outra dúvida é com relação a estrutura, devo criar um bean para os relatorios? ou crio um método dentro do Bean que ja tenho para criar os métodos?

Deu para entender? kkkkkk

3 respostas

Fala aí Jilles blz?

Bom o primeiro passo é você conseguir motar uma query (pode até ser nativa mesmo) que retorne as informações que você deseja (baseado nas suas entidades).

Muito provavelmente você vai ter que criar uma classe que expresse as informações que você deseja exibir. (essa classe não é uma entidade, mas é só um modelo para transportar os dados do banco até a view).

Exemplo:

Vamos supor que eu tenha uma entidade Carro com atributos (String) modelo, e (String) Cor.

E tenho uma outra entidade Vendas que tem um atributo (Calendar ou LocalDate) data, (BigDecimal) valor, e um atributo Carro. No meu mapeamento muitas vendas tem um carro.

E vamos supor que eu queira extrair um relatório que exiba a quantidade de carros, por modelo e cor foram vendidos em uma determinada data.

Para representar esse relatório eu preciso de um modelo que tenha os atributos quantidade, modelo, cor.

public class QuantidadeDeCarrosPorCorEModelo {

    private Long qtd;
    private String cor;
    private String modelo;

    public QuantidadeDeCarrosPorCorEModelo(Long qtd, String cor, String modelo){

        this.qtd = qtd;
        this.cor = cor;
        this.modelo = modelo;
    }


    //getters
}

para montar a query eu preciso retornar um objeto QuantidadeDeCarrosPorCorEModelo, poderia fazer isso dessa forma:

manager.createQuery("select new br.com.alura.dto.QuantidadeDeCarrosPorCorEModelo(count(c), c.cor, c.modelo) from Venda v join fetch v.carro c where v.data = :data", QuantidadeDeCarrosPorCorEModelo.class);

Essa classe que é utilizado somente para transferir os dados de um lugar (banco no nosso caso) para outro (view no nosso caso) é o que chamamos de DTO (Data Transfer Object).

Espero ter ajudado!

Entendi. Bacana essa idéia. Agora estruturalmente o correto seria ter um pacote apenas para os dtos?

Não sei se seria o mais correto, mas eu prefiro separar (mas é uma preferencia minha).

Geralmente eu crio o pacote de DTO dentro do pacote de modelos.