@Ms1403 escreveu:
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; }
Mensagens: 1
Participantes: 1