[ HIBERNATE ] Criteria não retorna nenhum resultado [RESOLVIDO]

Galera,

Estou precisando de uma ajuda, estou tentando utilizar criteria para criar um campo de filtro em um JTextField ( para filtar dados em uma tabela ).
Quando faço consultas ele sempre esta me retornando uma consulta vazia, mesmo quando digito um valor existente.
Estou usando ignoreCase() e MatchMode.ANYWHERE e mesmo assim ele não acha nenhum objeto;

Vou postar a minhas classes:

A classe de busca:

[code]public class FuncionarioDAO extends HibernateAbstractDAO<Funcionario, Long>{

public FuncionarioDAO() {
}

public Funcionario loadByMatr(long matr) {  
	return (Funcionario)getSession().createQuery("FROM Funcionario c WHERE c.numRegistro ="+matr+"").uniqueResult();
}

@Override
public List<Funcionario> select(String chave) {
	Criteria criteria = HibernateUtility.getSession().createCriteria(Funcionario.class);
	if(Numerico.isNumerico(chave)){
		criteria.add(Restrictions.eq("numRegistro",Integer.parseInt(chave)));
		criteria.add(Restrictions.eq("CPF", Long.parseLong(chave)));
	}
	criteria.add(Restrictions.like("nome", chave, MatchMode.ANYWHERE).ignoreCase());
	criteria.add(Restrictions.like("cargo", chave, MatchMode.ANYWHERE).ignoreCase());

	return (List<Funcionario>) criteria.list();
}

}[/code]

E a classe Funcionario

[code] public class Funcionario implements Serializable {

private String nome;
private long CPF;
private int numRegistro;
private String senha;
private String tipo;
private String cargo;
private Treinamento treinamento;
private int horasTreino;


public Funcionario() {
}

//set e gets

}[/code]

O que existe de errado ?
Se alguem puder me ajudar.
Desde já agradeço
[]`s

Tente usar Restrictions.ilike

Vê se resolve. Flw! :thumbup:

Você está adicionando ao Criteria 4 restrições. De modo q elas todas sejam iguais (eq) ao mesmo valor (chave).
Creio que nunca o nome do indivíduo seria o mesmo que o cargo dele.
Se vc quer q “chave” valha para qualquer UM dos campos, deve usar OR.

criteria = Restrictions.or(criteria, Restrictions.eq("outroCampo", chave));

Era esse erro conceitual mesmo, estava adicionando um monte de ANDs ao invés de ORs.
Estou me familiarizando com critéria por agora.
Obrigado ricardosoares, valeu pela ajuda.

O resultado final ficou assim


@Override
	public List<Funcionario> select(String chave) {
		Criteria criteria = HibernateUtility.getSession().createCriteria(Funcionario.class);
                //equivalente a OR
		Disjunction disjuction = Restrictions.disjunction();
		
		if(Numerico.isNumerico(chave)){
            // cláusula A
			disjuction.add(Restrictions.eq("numRegistro",Integer.parseInt(chave)));
            // cláusula B
			disjuction.add(Restrictions.eq("CPF", Long.parseLong(chave)));
		}
		         // cláusula C
                disjuction.add(Restrictions.like("nome", chave, MatchMode.ANYWHERE).ignoreCase());
		         // cláusula D
                disjuction.add(Restrictions.like("cargo", chave, MatchMode.ANYWHERE).ignoreCase());

       //add A v B v C v D
		criteria.add(disjuction);
		return (List<Funcionario>) criteria.list();
	}

Abraços

Também estou me familiarizando mais com hibernate.
Tinha um problema similar e esse post me ajudou muito. Valeu galera.

Olá Pessoal. Tem como retornar um List ao Invés de um Set, pois estou tendo problema com GWT…

adrian.gois,

Se não me engano o criteria já retona um List. Mas caso tenha esse problema podes criar um ArrayList a partir do seu Set.

new ArrayList(<Passa o Set aki!>);