Problema com Criteria

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?

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

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.

[quote=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.[/quote]

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,

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.

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

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.