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