Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

JPA Criteria Como adicionar um AND

Estou precisando que o filtro lazy recebe o parametro Estoque, com o criteria eu busco se tem 3 tipos de status na minha coluna.

Por exemplo, quando o usuario selecionar "Estoque" no status, que busca no banco com criteria todas as linhas que tem o status "iniciar mapeamento", "iniciar produçao" e "entregue".

Mas nao to conseguindo colocar um AND para poder me trazer todos esses.

Eu fiz do seguinde modo:

if(valorStatusDesenvolvimento.equalsIgnoreCase("Estoque")){                

Predicate statusDesenvolvimentoIgual = criteriaBuilder.equal(root.<String>get(colunaStatusDesenvolvimento), "iniciar produçao");

predicates.add(statusDesenvolvimentoIgual);    

statusDesenvolvimentoIgual = criteriaBuilder.equal(root.<String>get(colunaStatusDesenvolvimento), "iniciar mapeamento");

predicates.add(statusDesenvolvimentoIgual);

}

Mas não esta trazendo os dados.

Alguém pode me ajudar?

Grato!

7 respostas

Oi Diego, tudo bem? (:

Pra mim não ficou claro o que você quer fazer. Você quer trazer os registros que tenham status "iniciar mapeamento" ou "iniciar produção" ou "entregue"? Nesse caso, eu acho que a porta correta seria a or.

Abraços!

Gostaria de trazer tudo que tem esse 3 status na coluna.

Pensando no que você disse, acho que é isso mesmo.

Mas como eu consigo fazer isso com criteria? Voce poderia me mostrar um exemplo por favor?

Opa Diego,

Você precisa criar uma disjunction e depois pode usar o método or do CriteriaBuilder:

Predicate disjunction = builder.disjunction();
if(valorStatusDesenvolvimento.equalsIgnoreCase("Estoque")){                

    Predicate statusIgualIniciarProducao = criteriaBuilder.equal(root.<String>get(colunaStatusDesenvolvimento), "iniciar produçao");
    disjunction = builder.or(statusIgualIniciarProducao);

    Predicate statusIgualIniciarMapeamento = criteriaBuilder.equal(root.<String>get(colunaStatusDesenvolvimento), "iniciar mapeamento");
    disjunction = builder.or(disjunction, statusIgualIniciarMapeamento);

}

E no final você adiciona a Query no where:

em.createQuery(query.where(disjunction));

OBS: Digitei esse código na mão, pode ter algo errado. Qualquer coisa só falar!

Abraços!

Oi Diego,

Conseguiu resolver seu problema?

Forte abraço!

solução!

Ola Leonardo,

Desculpa pela demora, tive uns contra tempos.

Eu conseguir fazer funcionar, utilizei da seguinte forma

Predicate statusDesenvolvimentoIgual = criteriaBuilder.or(criteriaBuilder.equal(root.String>get(colunaStatusDesenvolvimento), "A Iniciar Mapeamento"),criteriaBuilder.equal(root.get(colunaStatusDesenvolvimento), "A Iniciar Produção"),criteriaBuilder.equal(root.get(colunaStatusDesenvolvimento), "Aguardando Responsavel"),criteriaBuilder.equal(root.get(colunaStatusDesenvolvimento), "Em Diligência"));

Coloquei o "or" conforme sua orientaçao e fui adicionando as buscas que preciso. Até o momento está funcionando perfeitamente.

Muito obrigado pelo seu suporte e atenção!

Abs

Boa Diego! Muito bem!

Qualquer coisa só abrir um tópico aqui!

Abraços!

Leonardo,

Você pode me auxiliar em um outro problemas que estou tendo com JPA ?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software