Problema com Criteria

6 respostas
J

Pessoal, to tentando fazer uma busca no banco de dados queme retorne baseado em duas restricoes: a consulta tem que estar dentro do intervalo de datas selecionado e possuir o numero de serie passado. O codigo ficou algo semelhante com:

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
            CriteriaQuery<Contadores> criteriaQuery = criteriaBuilder.createQuery(Contadores.class);
            Root<Contadores> cont = criteriaQuery.from(Contadores.class);
            criteriaQuery.select(cont);
            Predicate predicate = criteriaBuilder.between(cont.<Date>get("dataDaColeta"), dataInicial, dataFinal);
            criteriaQuery.where(predicate);
            if (!"TODOS".equals(numeroDeSerie)) {

                Predicate predicate2 = criteriaBuilder.equal(cont.get("numeroDeSerie"), numeroDeSerie);
                criteriaQuery.where(predicate2);
            }


            criteriaQuery.distinct(true);
            criteriaQuery.orderBy(criteriaBuilder.desc(cont.<Date>get("dataDaColeta")));
            TypedQuery<Contadores> queryDigitada = entityManager.createQuery(criteriaQuery);

O que acontece é que quando mando pesquisar pela data e todos os registro, ele me retorna corretamente, mas quando mando filtrar por um numero de serie X alem da data , ele nao me retorna dentro da data correta, ou seja, ele obedece somente a regra do numero de serie.

Alguem pode me auxiliar com este problema?

6 Respostas

V

nao entendo muito de criteria mas onde vc declara se é pra considerar como AND ou OR ?

J

Exatamente, até agora eu pensava que nao necessitaria declarar se é AND ou OR… acho que isso nao se aplica no jpa… alguem sabe me dizer se é preciso este tipo de informação:

Valeu.

K

jessetsilva:
Exatamente, até agora eu pensava que nao necessitaria declarar se é AND ou OR… acho que isso nao se aplica no jpa… alguem sabe me dizer se é preciso este tipo de informação:

Valeu.

Jovem,
este tipo de questionamento a única pessoa que pode responder é você mesmo. Trata-se de uma regra de negocio e não uma implementação técnica.

AND ou OR são condições lógicas e são aplicadas ao JPA.

Acesse o link: http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/querycriteria.html

Abs,

J

Acredito que me expressei mal.

claro que quem deve decidir sou eu sobre isso, mas a pergunta que fiz foi se eu posso colocar varias concatenacoes de where sem nenhuma restricoes (no caso um suprimir o outro, que é o que aparentemente acontece no trecho de codigo que postei).

Mas obrigado pela dica de todos, caso alguma coisa mais que possam me passar, estou pronto para novas ideia.

Obrigado.

V

Acho que este link tem oque vc quer
http://download.oracle.com/javaee/6/tutorial/doc/gjivm.html

J

Pessoal, descobri o que acontecia:

Como eu havia questionado, realmente um predicado estava suprimindo o outro, e para que isso parasse de acontecer é necessário colocar todos na criteria de uma vez só, por exemplo:

criteriaQuery.where(predicadoData, predicadoNumeroDeSerie);

Obrigado a todos pelas dicas.

Criado 13 de maio de 2011
Ultima resposta 16 de mai. de 2011
Respostas 6
Participantes 3