Criteria + Or (RESOLVIDO)

Boa tarde galera.

Estou com uma duvida aqui, referente a criteria. Gostaria de transformar esse sql em criteria…

select * from funcionario where gestor = 'True' 
and id_func_depto = 1 
and bit_excluir = 'False'
and (id_equipe1 is null 
or id_equipe2 is null 
or id_equipe3 is null)

até o momento meu método esta assim…

//METODO PARA LISTAR OS FUNCIONARIOS GESTORES CADASTRADOS DE UM DETERMINADO DEPARTAMENTO	
	public List<Funcionario> listarFuncGestorDeptos(int idDepto){
		Criteria criteria = session.createCriteria(Funcionario.class);
		criteria.add(Restrictions.eq("depto.idDepto", idDepto));
		criteria.add(Restrictions.eq("excluir", false));
		criteria.add(Restrictions.eq("tipoFuncionario", true));
		criteria.add(Restrictions.and(Restrictions.isNull("equipe1"), 
			(Restrictions.or(Restrictions.isNull("equipe2"), Restrictions.isNull("equipe3")))));				
		criteria.addOrder(Order.asc("nome"));		
		return criteria.list();	
	}

…mas não esta trazendo nenhum gestor. Tentei usando Logical Expression, mas não rolou :frowning:
Obs: Um gestor pode ser responsável por até 3 equipes

Espero ter sido claro hehe

Abs

Use simpleExpression

DetachedCriteria criteria = DetachedCriteria.forClass(Entidade.class);		
SimpleExpression condicao1 = Restrictions.eq("campoX","valor1");
SimpleExpression condicao2 = Restrictions.eq("campoX","valor2");
criteria.add(Restrictions.or(condicao1, condicao2));
1 curtida

Na chamada desse método você tá passando o idDepto = 1 ?

Acontece algum erro ou ele apenas retorna um set vazio?

finotti,
do seu jeito não funcionou… repare que eu comparo 3 colunas/atributos (equipe1, equipe2 e equipe3).

riqueluz,
Sim, estou passando o idDepto = 1
Não da erro nenhum, simplesmente vem vazia a list.

Tenta alterar esta linha:

criteria.add(Restrictions.and(Restrictions.isNull("equipe1"),   
            (Restrictions.or(Restrictions.isNull("equipe2"), Restrictions.isNull("equipe3")))));

Para:

criteria.add(Restrictions.or(Restrictions.isNull("equipe1"),   
            (Restrictions.or(Restrictions.isNull("equipe2"), Restrictions.isNull("equipe3")))));

riqueluz, funcionou!! Muito Obrigado!! :slight_smile:

Abs