Consulta com Criteria

4 respostas
J

Qual método que uso com criteria que seleciona os valores, exceto uma condição que eu escolher.

Exemplo: liste todos os números, exceto número igual=1;

obrigado!

4 Respostas

romarcio

Nesse exemplo eu busco todos telefones menos o que possui o id = 10;

return getSession().createCriteria(Telefone.class)
                .add(Restrictions.not(Restrictions.idEq(10)))
                .list();
J

romarcio, deu certo.

Agora gostaria que você me ajudasse, além dessa restrição gostaria de colocar uma outra no mesmo comando

Essa restrição é: Além colocar a primeira restrição tenho que listar apenas os usuários que tem determinada autorização

Veja como ficou minha consulta

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

Na tabela usuário eu coloco o código da autorizacao. Portanto imagino que o comando acima daria certo, visto que existem autorizacao com codigo “1” e que olhando no banco de dados, na tabela usuario há o valor 1 em alguns campos também.

O que está ocorrendo de errado? Quando tiro o Ultimo Restrictions ele lista todos os logins, porem quero listar apenas determinado logins.

Obrigado pela ajuda fera! :smiley:

romarcio

Você montou de forma correta a consulta. Deveria ter dado certo.
Faz um teste, assim:

Vê se retorna somente os usuários com restrição 1.

Uma coisa, quando usa idEq() é só para campos do tipo id. Seu getLogin() é um id ou uma String?
Se for String, troca o ideq() por eq(), ou like().

J

Como autorizacao era uma chave estrangeira, tive que fazer uma Alias

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

Obrigado

Criado 22 de outubro de 2011
Ultima resposta 23 de out. de 2011
Respostas 4
Participantes 2