Consulta com Hibernate

Olá,

Estou com dúvidas na criação de consultas utilizando o hibernate.
Segue as classes que estou utilizando.

Classe de controle - GerenteCidade

    public List listaTodos(){
        List lista=null;
        try{
            lista=dao.list(Cidade.class);
        } catch(Exception ex){
            setMensagem("Erro ao consultar cidades!");
        }
        return lista;
    }
    
    public List listaAlguns(int firsResult, int lastResult){
        List lista=null;
        lista=dao.list(Cidade.class,firsResult,lastResult);        
        return lista;
    }

Classe do DaoHibernateGenerico

    public List list(Class clazz) {
        return HibernateUtility.getSession().createCriteria(clazz).list();
    }
    
    public List list(Class clazz, int firstResult, int maxResults) {
        Criteria criteria =  HibernateUtility.getSession().createCriteria(clazz);
        criteria.setFirstResult(firstResult);
        criteria.setMaxResults(maxResults);
        return criteria.list();
    }
    
    public List listByExample(Object example) {
        Criteria criteria = HibernateUtility.getSession().createCriteria( example.getClass() );
        Example sample = Example.create( example );
        sample.enableLike();
        sample.excludeZeroes();
        criteria.add( sample );
        return criteria.list();
    }

Classe TableModelCidade

    public TableModelCidade(String filtro) {
        gerenteCidade=GerenteCidade.getInstance();
        listCidades=gerenteCidade.listaAlguns(0,49);
    }

Classe visão - FormCidade

    public void arrumaTabela(){
        String filtro="";
//        String filtro=" where "+jcb.getSelectedItem()+" like '%"+tfFiltro.getText()+"%' order by nome";
        tb=new TableModelEstado(filtro);
        tbConsulta.setModel(tb);
    }

A parte de listar todas as cidades, ou listar por número de resultados está ok…o que eu gostaria era montar a consulta de acordo com a escolha do usuário, no caso o usuário escolhe o critério da consulta em um jcombobox. Ex:

String filtro=" where “+jcb.getSelectedItem()+” like ‘%"+tfFiltro.getText()+"%’ order by nome";

Se alguém puder ajudar!

Obrigado

Diego

Dá uma olhada no Criteria API do hibernate, com ela dá pra fazer coisas do tipo:

criteria.add(Expression.eq("coluna", valor);

Olá,

Consegui fazer a pesquisa funcionar em uma tabela… Segue o código abaixo… Agora o que eu preciso é de inner join…

     public List listaCriterio(Class clazz,String atributo, String criterio){           
        List lista=null;
        Criteria crit = HibernateUtility.getSession().createCriteria(clazz,atributo);
        crit.add(Restrictions.like(atributo,"%"+criterio+"%") );
        crit.addOrder(Order.asc(atributo));
        crit.setMaxResults(30);
        lista=crit.list();
        return lista;
    } 

Gostaria de fazer algo desse tipo…

select cidade.nome, estado.sigla from cidade inner join estado on estado.idestado=cidade.idestado;

Se alguém puder ajudar…

Obrigado

Diego