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

Pode ser mais ou menos assim:

[code]public List list(Class clazz, String valor) {
Criteria criteria = HibernateUtility.getSession().createCriteria(clazz);
criteria.add(Restrictions.eq("cidade.Nome", valor))
.add(Restrictions.like("cidade.Nome", "%" + valor))
.addOrder(Order.asc("cidade.Nome"));

    return criteria.list();

}[/code]

Não testei esse método, se tiver algum erro… coloca aqui!

Não sei se eu testei errado… Da uma olhada no erro!

Classe - GerenteCidade

    public List list(Class clazz, String valor) {
        Criteria criteria =  HibernateUtility.getSession().createCriteria(clazz);
        criteria.add(Restrictions.eq("cidade.Nome", valor))
                  .add(Restrictions.like("cidade.Nome", "%" + valor))
                  .addOrder(Order.asc("cidade.Nome"));

        return criteria.list();
}

Classe de teste

public class Teste {
    
    public static void main(String args[]) throws IOException{
        String teste="RONDON";
        
        List<Cidade> l=GerenteCidade.getInstance().list(Cidade.class,teste);
        for (Cidade c:l){
            System.out.println(c.getNome());
01:03:52,046  WARN Configurator:126 - No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath: jar:file:/D:/Desenvolvimento/Java/Faculdade/Sistema/lib/ehcache-1.1.jar!/ehcache-failsafe.xml
Exception in thread "main" org.hibernate.QueryException: could not resolve property: cidade of: br.com.sisestagioII.modelo.Cidade
        at org.hibernate.persister.entity.AbstractPropertyMapping.throwPropertyException(AbstractPropertyMapping.java:43)
        at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:37)
        at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1282)
        at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:31)
        at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1257)
        at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:433)
        at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumnsUsingProjection(CriteriaQueryTranslator.java:393)
        at org.hibernate.criterion.SimpleExpression.toSqlString(SimpleExpression.java:45)
        at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:333)
        at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:82)
        at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:67)
        at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1533)
        at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
        at br.com.sisestagioII.controle.GerenteCidade.list(GerenteCidade.java:115)
        at br.com.sisestagioII.controle.Teste.main(Teste.java:15)
Java Result: 1
BUILD SUCCESSFUL (total time: 5 seconds)

Obrigado pela ajuda!!

Diego

Tenta:

[code]public List list(Class clazz, String valor) {
Criteria criteria = HibernateUtility.getSession().createCriteria(clazz);
criteria.add(Restrictions.eq("cidade.Nome", valor))
criteria.add(Restrictions.like("cidade.Nome", "%" + valor))
criteria.addOrder(Order.asc("cidade.Nome"));

    return criteria.list();

}[/code]

Nada ainda…

Da forma que vc passou…

public List list(Class clazz, String valor) {
        Criteria criteria =  HibernateUtility.getSession().createCriteria(clazz);
        criteria.add(Restrictions.eq("cidade.Nome", valor))
        criteria.add(Restrictions.like("cidade.Nome", "%" + valor))
        criteria.addOrder(Order.asc("cidade.Nome"));

        return criteria.list();
}

Da esse erro…

18:46:53,515  WARN Configurator:126 - No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath: jar:file:/D:/Desenvolvimento/Java/Faculdade/Sistema/lib/ehcache-1.1.jar!/ehcache-failsafe.xml
Exception in thread "main" org.hibernate.QueryException: could not resolve property: cidade of: br.com.sisestagioII.modelo.Cidade
        at org.hibernate.persister.entity.AbstractPropertyMapping.throwPropertyException(AbstractPropertyMapping.java:43)
        at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:37)
        at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1282)
        at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:31)
        at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1257)
        at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:433)
        at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumnsUsingProjection(CriteriaQueryTranslator.java:393)
        at org.hibernate.criterion.SimpleExpression.toSqlString(SimpleExpression.java:45)
        at org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:333)
        at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:82)
        at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:67)
        at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1533)
        at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
        at br.com.sisestagioII.controle.GerenteCidade.list(GerenteCidade.java:115)
        at br.com.sisestagioII.controle.Teste.main(Teste.java:15)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)

Tentei assim também não funcionou…

public List list(Class clazz, String valor) {
        Criteria criteria =  HibernateUtility.getSession().createCriteria(clazz);
        criteria.add(Restrictions.eq("cidade.Nome", valor));
        criteria.add(Restrictions.like("cidade.Nome", "%" + valor));
        criteria.addOrder(Order.asc("cidade.Nome"));

        return criteria.list();
}

Alguma outra sugestão?

Obrigado pela ajuda…

Diego

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 pela ajuda!

Diego