Hibernate Varios filtros

9 respostas
V

Pessoal,

Estou tentando criar um método no que receba um objeto e consulte os dados de acordo com o (s) filtro(s) passados.

Ex.: Objeto Cliente se tiver preenchido o cpf pesquisa por cpf, se estiver preenchido o cpf e nome pesquisa pelos dois … e assim por diante…

alguem tem alguma sugestão …

9 Respostas

A

Criteria.

maxmustang

bem… vc pode fazer isso com criteria sim
mas nesse caso
aconselho a fazer com Query, nesses casos eu pelomenos faço com query
abs

A

Pensei numa forma mas achei ela pouco elegante, e também não sei se conseguiria aplicar aí, veja: if(nome != null) você direcionar para essa query
else{ você direciona para a query sem o nome só com o cpf.

A

maxmustang:
bem… vc pode fazer isso com criteria sim
mas nesse caso
aconselho a fazer com Query, nesses casos eu pelomenos faço com query
abs

Exemplifique para nós por favor…

Abraços,
AS.

maxmustang

acho mais simples pra fazer validação…

Date dataInicio = null;
        Date dataFim = null;
        String hql = "from " + Preco.class.getName() + " p where ";
        hql = hql + "p.cliente = :pcliente";

        if (form.getPlano().getId() == null || form.getPlano().getId() == 0) {
        } else {
            hql += " and p.plano = :pplano";
        }

        if (!form.getDtInicioString().equals("") && !form.getDtFimString().equals("")) {
            hql = hql + " and p.dtInicioVigencia between :pinicio and :pfim";
        }

        if (form.getConvenio().getId() != 0 && form.getConvenio().getId() != null) {
            hql += " and p.plano.convenio = :pconvenio";
        }

        if (form.getItemFaturamento().getId() != 0 && form.getItemFaturamento().getId() != null) {
            hql = hql + " and p.itemFaturamento = :pitem";
        }

        System.out.println(hql);
        Query query = hibernateSession.createQuery(hql);
        if (form.getPlano().getId() == null || form.getPlano().getId() == 0) {
        } else {
            Plano p = CadastroFacade.buscarPlanoSelecionado(hibernateSession, form.getPlano());
            query.setParameter("pplano", p);
        }
        if (form.getItemFaturamento().getId() != 0 && form.getItemFaturamento().getId() != null) {
            ItemFaturamento i = CadastroFacade.buscarItemFaturamentoSelecionado(hibernateSession, form.getItemFaturamento());
            query.setParameter("pitem", i);
        }
        if (form.getConvenio().getId() != 0 && form.getConvenio().getId() != null) {
            Convenio convenio = CadastroFacade.buscarConvenioSelecionado(hibernateSession, form.getConvenio());
            query.setParameter("pconvenio", convenio);
        }
        query.setParameter("pcliente", cliente);
        if (!form.getDtInicioString().equals("") && !form.getDtFimString().equals("")) {
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
            dataInicio = sdf.parse(form.getDtInicioString());
            dataFim = sdf.parse(form.getDtFimString());
            Calendar calendar = new GregorianCalendar();
            calendar.setTime(dataFim);
            calendar.add(Calendar.DAY_OF_MONTH, 1);
            query.setParameter("pinicio", dataInicio);
            query.setParameter("pfim", calendar.getTime());
        }
        return query.list();
maxmustang

andredecotia:
Pensei numa forma mas achei ela pouco elegante, e também não sei se conseguiria aplicar aí, veja: if(nome != null) você direcionar para essa query
else{ você direciona para a query sem o nome só com o cpf.

por isso acho a Query mais simples
que a Criteria pra fazer esse tipo de filtro

alem de ter de testar cada situação pra criar uma Criteria diferente

if(nome != null)
faz isso

if(nome != null && cpf != null)
faz aquilo

V

Muito obrigado pelas respostas… Vou fazer no FDS e posto aqui, vou tentar implementar no meu DAO Generico…

P

Na área de frameworks brasileiros alguem postou uma solução de consulta generica usando hibernate, de uma olhada lá.

R

http://www.guj.com.br/java/51923-criteria-usando-examples-no-hibernate

Query by Example

Criado 3 de março de 2011
Ultima resposta 3 de mar. de 2011
Respostas 9
Participantes 5