Criei um método genérico que recebe uma lista de parametros e faz a busca no banco de dados para devolver uma lista de objetos que contenham aqueles parametros. Estou fazendo isso usando criteria, mas quando o hibernate faz a query no meu console aparece que ele ta fazendo where like... AND like... AND like...
O que eu gostaria é que ele fizesse a query só que no lugar do AND fosse OR, mas não estou conseguindo. Gostaria de uma ajuda, vou deixar o código do método abaixo. Obrigado.
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;
}