Busca geral com hibernate

Bom dia, alguem sabe me dizer como faço uma busca geral com hibernate, usando criteria talvez, sem ser escrevendo o sql na mão, escrever na mao sera em ultimo caso se vcs me falarem que nao da pra fazer usando os recursos do hibernate. A ideia é a seguinte, criar um unico campo de busca, sem filtros onde independe se o usuario ira digitar o nome da pessoa ou o codigo dela, algum resultado sera exibido a partir do momento que ele começar a digitar ae fica a cargo do usuario escolher entre os resultado obtidos o q atende ao q ele busca.

quanto a exibir os resultados e etc isso sera via ajax, minha duvida é referente a busca mesmo, feita la no DAO, um metodo que tenho pronto ja q faz a busca é este abaixo:

         public Pessoa carrega(Long id) {
		return (Pessoa) HibernateUtil.currentSession().createCriteria(Pessoa.class)
				.add(Restrictions.eq("id", id))
				.uniqueResult();
	}

porem como da pra ver ele busca apenas por id, o q eu quero é algo mais livre q possa buscar em N colunas os valores

Se você não quer fazer um sql você terá que ficar adicionando/removendo restrictions.

OBS.: O método fala que vai retornar Pessoa e você ta fazendo um cast para Escola? O.O

ah sim, é q eu editei este codigo ae antes de colocar aqui, é só pessoa mesmo

Bom então se eu adicionar mais uma restriction ae vai fucnionar?? digamos q eu queira q a busca seja por id ou nome, se o usuario começar a digitar o id a busca sera feita, se começar a digitar o nome tmb, pra isso basta eu colocar mais um restriction??

[quote=renatomattos2912]ah sim, é q eu editei este codigo ae antes de colocar aqui, é só pessoa mesmo

Bom então se eu adicionar mais uma restriction ae vai fucnionar?? digamos q eu queira q a busca seja por id ou nome, se o usuario começar a digitar o id a busca sera feita, se começar a digitar o nome tmb, pra isso basta eu colocar mais um restriction??[/quote]Você testou? O que aconteceu?

No caso você quer usar um or. Se você em sql você faria “where nome = ? or id = ? or endereco = ?”. Com a API criteria, utilize uma disjunction:

Disjunction disjunction = Restrictions.disjunction();
disjunction.add(Restrictions.eq("id", padraoDeBusca));
disjunction.add(Restrictions.ilike("nome", padraoDeBusca));
criteria.add(disjunction);
return criteria.list();

No caso você quer usar um or. Se você em sql você faria “where nome = ? or id = ? or endereco = ?”. Com a API criteria, utilize uma disjunction:

Disjunction disjunction = Restrictions.disjunction(); disjunction.add(Restrictions.eq("id", padraoDeBusca)); disjunction.add(Restrictions.ilike("nome", padraoDeBusca)); criteria.add(disjunction); return criteria.list(); [/quote]

Isso mesmo, um OR, obrigado irei testar