[RESOLVIDO] Dúvida com criteria. Trazer resultado no qual seja o valor 1 e 3

Tenho uma criteria que traz um resultado que o campo seja igual a 3.
Como faço para ele trazer o resultado da coluna onde seja igual a 3 e igual a 1 também.

Tentei dessa forma e não deu certo

return session.createCriteria(Usuario.class).add(Restrictions.not(Restrictions.idEq(uc.getUsuario().getLogin())))
		.createAlias("autorizacao", "id").add(Restrictions.eq("autorizacao.id", 3)) .add(Restrictions.eq("autorizacao.id", 1)).list();

Boa noite!

Cara não sei se sou eu, mas não consegui ler seu código. Está com muitos add seguidos, tenta dar uma melhorada! De repente o problema é até este. :thumbup:

Mas acho que a solução deve ser o Restrictions.and(Criterion,Criterion). Segue um exemplo:


Criteria crit = ss.createCriteria(Usuario.class);

Criterion restricao1 = Restrictions.eq("autorizacao.id", 1);
Criterion restricao2 = Restrictions.eq("autorizacao.id", 3);
Criterion busca = Restrictions.and(restricao1, restricao2);

crit.add(busca);

return crit.list();

Eu sugiro a vc criar uma lista de Criterions e passar para sua classe DAO (se tiver), onde ela faça com que a Criteria receba esta lista:


Criteria crit = ss.createCriteria(getClasseDAO());

            if (listaRestrictions != null && !listaRestrictions.isEmpty())
            {
                for (int i = 0; i < listaRestrictions.size(); i++)
                {
                    crit.add(listaRestrictions.get(i));
                }
            }

return crit.list();

Até +!

Vo te explicar o meu código. Primeiro ele vai pegar todos os usuarios com autorizacao 3, exceto o usuario logado.
Esse createAlias é o relacionamento de duas tabelas.

Tenta algo assim.

        Criteria crit = session.createCriteria(Usuario.class);
        Criteria suppCrit = crit.createCriteria("autorizacao");
        suppCrit.add(Restrictions.eq("id", 3 ));
        List results = crit.list();//lista usuários com autorização 3

da uma olhada nesse para ver se te ajuda

http://www.guj.com.br/java/259034-resolvidoproblema-com-uma-consulta-em-criteria-hibernate

Boa sorte

Murilo, ja resolvi meu problema. Da forma que está seu código ele só traz de autorização igual a 3, porem eu quero traze 3 e 1. Para resolver esse problema pus o seguinte código

return session.createCriteria(Usuario.class).add(Restrictions.not(Restrictions.idEq(uc.getUsuario().getLogin())))
		.createAlias("autorizacao", "id").add(Restrictions.between("autorizacao.id", 1, 3))
		.add(Restrictions.not((Restrictions.eq("autorizacao.id", 2)))).list();

Ele traz valores entre 1 e 3 ai coloquei uma restrição informando que não quero trazer resultado igual a 2

Bom, acho que se você troca-se essa linha

suppCrit.add(Restrictions.eq("id", 3 )); 

por essa

suppCrit.add(Restrictions.between("id", 1, 3)); 

Também funcionaria