Этот URL (https://www.baeldung.com/rest-api-search-language-spring-data-specifications) поможет вам, я скопировал некоторый код из URL, чтобы объяснить вам.
вам необходимо определить класс критериев
public class SearchCriteria {
private String column;
private String operation;
private Object value;
}
Затем вам нужно определить свою поисковую спецификацию
public class SearchSpecification implements Specification<MyEntity> {
private SearchCriteria criteria;
private SearchSpecification(SearchCriteria criteria){
this.criteria =criteria;
}
@Override
public Predicate toPredicate
(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
if (criteria.getOperation().equalsIgnoreCase(":")) {
if (root.get(criteria.getColumn()).getJavaType() == String.class) {
return builder.like(
root.<String>get(criteria.getColumn()), "%" + criteria.getValue() + "%");
}
}
return null;
}
}
Тогда, наконец, вы можете изменить свой репозиторий, расширив JpaSpecificationExecuto r
public interface MyRepository
extends JpaRepository<User, Long>, JpaSpecificationExecutor<MyEntity> {}
Теперь вы можете создать спецификацию для каждого столбца для вашего случая все двадцать столбцов
SearchSpecification spec1 =
new SearchSpecification(new SearchCriteria("column1", ":", "searchVal"));
SearchSpecification spec2 =
new SearchSpecification(new SearchCriteria("column2", ":", "searchVal"));
SearchSpecification spec3 =
new SearchSpecification(new SearchCriteria("column3", ":", "searchVal"));
Затем вам нужно выполнить запрос, например
List<MyEntity> results =
repository.findAll(Specification.where(spec1).or(spec2).or(spec3));