title: openjpa criteria builder and or
body: <p>Hi i need to do a complex query, with and or condition. But the and condition seems to override the or condition here's my code:</p>
  
  <pre><code>public List&lt;UtenteEntity&gt; search(CartesioPojo params) {
      CriteriaBuilder cb = entityManager.getCriteriaBuilder();
      CriteriaQuery&lt;UtenteEntity&gt; q = cb.createQuery(UtenteEntity.class);
      Root&lt;UtenteEntity&gt; c = q.from(UtenteEntity.class);
      UtenteParams utente = (UtenteParams) params;
      List&lt;Predicate&gt; p = new Vector&lt;Predicate&gt;();
      if(utente.getUsername() != null &amp;&amp; !utente.getUsername().equals(""))
          p.add(cb.equal(c.get("username"), cb.literal(utente.getUsername())));
      if(utente.getCognome() != null &amp;&amp; !utente.getCognome().equals(""))
          p.add(cb.and(cb.equal(c.get("cognome"), cb.literal(utente.getCognome()))));
      if(utente.getRoles() != null &amp;&amp; !utente.getRoles().isEmpty()) {
          for (RuoloEntity ruolo : utente.getRoles()) {
              p.add(cb.or(cb.equal(c.get("ruolo"), cb.literal(ruolo))));
          }
      }
      q.where(p.toArray(new Predicate[p.size()]));
      q.orderBy(cb.asc(c.get(USERNAME_COLUMN)));
      TypedQuery&lt;UtenteEntity&gt; query = entityManager.createQuery(q);
      List&lt;UtenteEntity&gt; result = query.getResultList();
      return result;
  }
  </code></pre>
  
  <p>this is the console output when I exceute this method:</p>
  
  <pre><code>executing prepstmnt 2471808 SELECT t0.SEQU_LONG_ID, t0.DATA_AGGIORNAMENTO, 
  t0.DATA_CREAZIONE, t0.FK_UTENTE_AGGIORNAMENTO, t0.FK_UTENTE_CREAZIONE, t0.COGNOME, 
  t0.FLAG_DISABILITATO, t0.NOME, t0.PASSWORD, t1.SEQU_LONG_ID, t1.DATA_AGGIORNAMENTO, 
  t1.DATA_CREAZIONE, t1.FK_UTENTE_AGGIORNAMENTO, t1.FK_UTENTE_CREAZIONE, t1.CODICE, 
  t1.DESCRIZIONE, t0.USERNAME FROM UTENTE t0, RUOLO t1 WHERE 
  (t0.FK_RUOLO = ? AND t0.FK_RUOLO = ?) AND t0.FK_RUOLO = t1.SEQU_LONG_ID(+) 
  ORDER BY t0.USERNAME ASC [params=?, ?]
  </code></pre>