Galera estou tentando criar uma pesquisa dinamica usando criteria, mas quando executo tal metódo a clausula where vem com ANDs e não com OR. Gostaria de fazer algo do tipo: where field like parameter OR anotherField like parameter e assim por diante, mas a query só vem com AND. Alguém por favor me da uma luz
public List<T> findByParameter(List<String> elements){
Class<?> generic = this.clazz;
CriteriaBuilder criteriaBuilder = this.manager.getCriteriaBuilder();
CriteriaQuery<T> query = criteriaBuilder.createQuery(this.clazz);
Root<T> root = query.from(this.clazz);
List<Predicate> predicates = new ArrayList<Predicate>();
for(String element : elements){
while (generic != null) {
for (Field field : generic.getDeclaredFields()) {
field.setAccessible(true);
if(field.getType() == String.class){
predicates.add(criteriaBuilder.like(root.get(field.getName()), "%" + element + "%"));
}
}
generic = generic.getSuperclass();
}
}
query.where((Predicate[])predicates.toArray(new Predicate[0]));
List<T> resultList = this.manager.createQuery(query).getResultList();
resultList.stream().forEach(System.out::println);
return resultList;
}