1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Criar criteria hibernate dinamicamente atraves de filtros e Reflection

Estou querendo montar uma pesquisa atraves de critérias, utilizando reflecion e classes de filtro. Poderei ter várias destas classes de filtros. por isso ser de forma dinâmica.

Minha Classe Filtro:


public class MantenedorFiltro implements IFiltroPesquisaAvancada{

    private CampoFiltroLong id = new CampoFiltroLong();

    private CampoFiltroString nome = new CampoFiltroString();

    private CampoFiltroStatus status = new CampoFiltroStatus();

    public CampoFiltroLong getId() {
        return id;
    }

    public void setId(CampoFiltroLong id) {
        this.id = id;
    }

    public CampoFiltroString getNome() {
        return nome;
    }

    public void setNome(CampoFiltroString nome) {
        this.nome = nome;
    }

    public CampoFiltroStatus getStatus() {
        return status;
    }

    public void setStatus(CampoFiltroStatus status) {
        this.status = status;
    }
}

Minha Classe CampoFiltroLong


public abstract class CampoFiltro {

    private EnumFiltro tipoFiltro;


    public EnumFiltro getTipoFiltro() {
        return tipoFiltro;
    }

    public void setTipoFiltro(EnumFiltro tipoFiltro) {
        this.tipoFiltro = tipoFiltro;
    }
}

Minha Classe CampoFiltro

public abstract class CampoFiltro {

    private EnumFiltro tipoFiltro;


    public EnumFiltro getTipoFiltro() {
        return tipoFiltro;
    }

    public void setTipoFiltro(EnumFiltro tipoFiltro) {
        this.tipoFiltro = tipoFiltro;
    }
}

Meu EnumFiltro

public enum EnumFiltro {
    IGUAL(0 , "Igual"),
    MENORQUE(1 , "Menor que"),
    MAIORQUE(2 , "Maior que"),
    DIFERENTEDE(3 , "Diferente de"),
    INICIACOM(4 , "Inicia com"),
    TERMINACOM(5 , "Termina com"),
    CONTEM(6 , "Contem");


    private int id;

    private String filtro;

    private EnumFiltro(int id, String filtro){
        this.setId(id);
        this.setStatus(filtro);
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getStatus() {
        return filtro;
    }

    public void setStatus(String filtro) {
        this.filtro = filtro;
    }

}

meu MantenedorDao vai receber numa funcao buscaPorFiltro, O mantenedorFiltro.. no dao. quero ter uma função que monte meus criterias . Esta mesma lógica poderei usar para outras entidades, ou se precisar mudar o filtro. não mudar a lógica.

Pensei em algo assim:

public List<Criterion> montarCriterias(classeFiltro IFiltroPesquisaAvancada){
        List<Criterion> critery = new ArrayList<Criterion>();

        Class<? extends IFiltroPesquisaAvancada> classe = classeFiltro;

        //Aqui montaria meus criterias. Vejam que tenho as classes CampoFiltroLong, CampoFiltroString. uma argumento é long o outro string.
        //Poderia ter outros tipos.

        return critery;
    }
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags hibernate ou faça a sua própria pergunta.